<< フォルダ内jpg画像を一括回転させ... 質問一覧 画像の持ち回りについて >>

  • 0P
sleepとheader関数

ユーザからのリクエストパラメータが不当な場合、所定の頁(トップ頁)に数秒後に移動させようとしています。下記のコードにしたのですが、うまく移動できません。案内メッセージは表示されます。何が原因でしょうか。
なお不当なパラメータになる原因は、パラメ-タを変更したため、以前の検索エンジンの結果から呼び出したためです。
本題とはずれますが、検索エンジン内の古い無効な登録内容を消去させる方法は無いものでしょうか。かなり古い結果も残っているようなのです。

>>CODE
<?php

// $_GET 処理

if(パラメータが正当){

  正当なレスポンス処理
}
else {
   redirect();


function redirect()
{
global $charset;

printf("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n");
printf("<HTML>\n");
printf("<HEAD>\n");
printf("<META http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",$charset);
printf("</head><body>\n");

printf("検索エンジンの古い検索結果からの呼び出しのため、処理できません。5秒後にトップ頁に移動しますので、改めてトップ頁からたどってください。");

printf("</BODY></html>\n");

sleep(5);
header("Location: http://sigesplants.chicappa.jp/");
}
<CODE
Qsleepとheader関数 sigebo  [09月22日 12時07分] 
┣参考になったRe:sleepとheader関数 moocho  [09月22日 12時28分] 
┃┗Re:Re:sleepとheader関数 sigebo  [09月22日 13時25分] 
┣参考になったRe:sleepとheader関数 tezcello  [09月22日 13時04分] 
┃┗Re:Re:sleepとheader関数 sigebo  [09月22日 13時33分] 
┣満開Re:sleepとheader関数 NurseAngel  [09月22日 13時56分] 
┃┗Re:Re:sleepとheader関数 sigebo  [09月22日 14時42分] 
┃  ┗満開Re:Re:Re:sleepとheader関数 weekendphp  [09月22日 15時18分] 
┃    ┗Re:Re:Re:Re:sleepとheader関数 sigebo  [09月22日 19時39分] 
┗(削除済み)

コメント一覧

並び替え( ツリー順 / 投稿順[降順] / 投稿順[昇順]

Re:sleepとheader関数

moochoと申します。

header()とsleep()の使い方を勘違いされていますね。

header("Location: ...")はサーバ側で
ページ遷移を実行するためのものです。

それと、printf("...");などのように文字列を出力した時点で
header()は利用できません。
エラーになりますが、詳しくはマニュアルを読んでください。

sleep()もサーバ側でのPHPスクリプトの実行を遅延させるものです。

指定秒待ったあと、出力結果がブラウザに返ってくるだけなので
希望されている処理にはならないでしょう。

画面出力後、数秒待ってページを切り替える場合は
METAタグのRefreshを利用するか、Javascriptのlocationを使用します。
ツリーへ TOPへ

Re:Re:sleepとheader関数

早速のご返事ありがとうございます。header関数の意味が良くわからないまま使いました。
それで、ご案内のJavaは簡単には導入できないので、Refreshを使ってみました。
しかし、移動はできず、5秒ごとに案内の画面が表示されるだけのように見えました。
それで、あきらめています。

  1. printf("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n");
  2.   printf("<HTML>\n");
  3.   printf("<HEAD>\n");
  4.   printf("<META http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",$charset);
  5.   printf("<META http-equiv=\"Refresh\" content=\"5,URL=http://sigesplants.chicappa.jp/\">\n");
  6.   printf("</head><body>\n");
  7.  
  8.   printf("検索エンジンの古い検索結果からの呼び出しのため、処理できません。5秒後にトップ頁にジャンプします。<br>");
  9.  
  10.   printf("<a href=\"http://sigesplants.chicappa.jp/\">http://sigesplants.chicappa.jp/</a>");  
  11.  
  12.   printf("</BODY></html>\n");
ツリーへ TOPへ

Re:sleepとheader関数

header() のマニュアルをもう一度読んでみてください。
「すべての実際の 出力の前にコールする必要があることです」と書いてあります。

header() の前に、既にHTML文を出力してしまっていますよね?
その為に、location で飛ばそうとしているのが効果を果たしていないのだろうと思います。
ツリーへ TOPへ

Re:Re:sleepとheader関数

早速のご返事ありがとうございます。
参照しているマニュアルには、そのような記述はありませんでしたが、Header関数の機能を類推すれば、わからないこともありません。 それならばと、つぎのように
まず、案内頁を出力してから、5秒スリープして、その後、header関数だけ送るようにしました。
しかし、これでも、うまくジャンプしませんでした。

うまくいく方法が見つかればよいですが、とりあえず、ジャンプ先だけ案内の頁を送り、それをクリックしてもらうようにしました。


  1. printf("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n");
  2.   printf("<HTML>\n");
  3.   printf("<HEAD>\n");
  4.   printf("<META http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",$charset);
  5.   printf("</head><body>\n");
  6.  
  7.   printf("検索エンジンの古い検索結果からの呼び出しのため、処理できません。5
  8. 秒後にジャンプします。<br>");
  9.  
  10.      printf("</BODY></html>\n");
  11.  
  12.   sleep(5);
  13.  
  14.   header("Location:http://sigesplants.chicappa.jp/");
ツリーへ TOPへ

Re:sleepとheader関数

「マニュアル」とは、
http://www.php.net/manual/ja/
のことです。


headerで送られるメッセージヘッダは、
<head>で送られるヘッダとはまったく別物で、
メッセージそれ自体の動作を決めるものです。
http://www.atmarkit.co.jp/fnetwork/rensai/netpro01/message.html
メッセージボディの後にメッセージヘッダを送信しても正しく動作しません。

リフレッシュ動作はメッセージボディ内の<head>で行う必要があります。


そのRefreshですが、
<meta http-equiv="Refresh" content="秒数;URL=遷移先">
です。よく見ましょう。



#header()をメッセージヘッダとかHTTPヘッダと呼ぶ場合、
#<head>は何と呼べばいいんだろう…?
ツリーへ TOPへ

Re:Re:sleepとheader関数

>そのRefreshですが、・・・よく見ましょう。
セミコロンをコンマとしていた間違いがわかりました。修正してOKでした。

Hedaerのマニュアルをご紹介ありがとうございます。良くわからない所がありますが、今回の課題について、header関数は有用でしょうか。有用な場合、どの様に使えばよいでしょうか。
ツリーへ TOPへ

Re:Re:Re:sleepとheader関数

マニュアル(http://jp2.php.net/header)にも例がありますが、
header関数は、HTTPヘッダーを返す際に有用です。

HTTPヘッダーについては、下記などを参照してみてください。
http://www.studyinghttp.net/header

具体的には、
・HTMLの文字コードの送出
・リダイレクト処理
・キャッシュ制御の送出
・ファイルをダウンロードさせる
際などに使われる事が多いです。

以上、参考まで。
ツリーへ TOPへ

Re:Re:Re:Re:sleepとheader関数

大変参考になる情報ありがとうございました。以前からHeaderの内容については知りたいと思っていましたので、いくつかの疑問もわかりました。
ツリーへ TOPへ

(削除済み)

この意見は投稿者によって削除されました。
ツリーへ TOPへ
フォルダ内jpg画像を一括回転させ... 質問一覧 画像の持ち回りについて