• ベストアンサー

phpで自分自身の更新日時を書き換える

phpでファイルへアクセスがあった際に、自分自身の更新日時を、現在の日時に書き換えたいのですが、うまくいきません。以下のソースを</body>タグの前に入れてますが、ダメです。 どうしたらいいでしょうか。 <?php $fn=str_replace("/","",$_SERVER['SCRIPT_NAME']); $tm=time(); touch($fn,$tm); ?>

  • PHP
  • 回答数5
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

777にしてダメなら、権限とかPHPやApacheの設定の問題ですね・・・ レンタルサーバだと細かい設定も変えられそうもないので、別のアプローチで行くしかないです。 fopenでいけるか試してみては。 <?php $fn = __FILE__; $contents = file_get_contents($fn);//最初に同スクリプトの全内容を取得。 $fp = fopen($fn, 'w'); //同ファイルを上書きモードで開く if(!$fp){ exit(); //ファイルが開けなかった場合の処理 } if(!flock($fp, FILE_EX)){ //書き込みのロックかける //んだけど、失敗した場合 exit(); //とりあえず終了 } if(!fwrite($fp, $contents)){ //ファイルの書き込み //するんだけど、失敗した場合 exit(); //とりあえず終了 } fclose($fp); //ファイルを閉じる ?> といったように、自分自身を全部取得して、全部書きなおす処理。 テキストファイルに書き込みとかが出来るのであればこれでもできそうですがいかがでしょう。

acchi19740615
質問者

お礼

flockはエラーが出るので削除しました。その他はパーミッション646で動きました。うまく書き換えできているようです。 結局touchが動かないのとflockがきかない原因は不明でしたが、目的は達成できました。 最後まで丁寧な回答、ほんとうにありがとうございました。

その他の回答 (4)

回答No.4

一度パーミッションを777にしてみてはいかがでしょう。

acchi19740615
質問者

補足

上位フォルダも含め777にしてみましたが、効果ありませんでした。他のサイトで見たので、ユーザーに問題があるかもとwebツールのアップローダー(CGI)でファイルをアップロードしてみましたが、これも効果なしです。

回答No.3

回答遅くなりましたが、 私の記述したもので、ローカル環境(Win7 PHP5.3.1)及び、レンタルサーバ(さくらインターネット)で確認しましたが タイムスタンプは更新されるようでした。 FTPソフトは、キャッシュとか残してたりしてませんか? 更新ボタンとか押してみてもダメでしょうか。

acchi19740615
質問者

補足

遅くなりました。 ソフトはHPビルダー付属のものを使用しています。キャッシュはのこっていないようで、更新ボタンを押してもダメです(上書きしたファイルをアップロードすると更新されますので)。 ファイルは.htaccessによりhtml拡張子を利用しています。 (.htaccessファイルにAddType application/x-httpd-php .htm .htmlを記載) パーミッションは644です。 サーバは美ら海サーバを利用しています。 phpバージョンはVer.5.1.6です。 .htaccessはそのままに拡張子phpにしてもダメでした。 どこかに問題があるのでしょうか? 尚、どうもtouchコマンドの戻り値がfalseになっているのでエラーになっているようです。touchコマンドで空ファイルを作成しようとしてもエラーが出るので、ここに問題がありそうです。 phpのバージョンも異なるようですのでここも問題でしょうか?

回答No.2

>FTPソフトでファイルの更新日時を確認したときに、何も変化がないですよね・・・。ファイルの更新日時自体を変更したいのですが、touchで自身を書き換えるのは無理なんでしょうか。。。 そういうことなら、単純に記述したパスの書き方に問題があるという話なので、 <?php $fn = __FILE__; //この定数は自分自身のローカルのフルパスが含まれてます。 touch($fn, time()); ?> これでいけると思います。

acchi19740615
質問者

補足

頂いたソースを試してみましたが、更新日時は更新されませんでした。。。

回答No.1

Webサイトに、アクセスされたときに、最終更新日を常に最新の物に書き換えたい、という意図ですか。 それであれば、キャッシュを残していない限り、PHPはアクセス毎にリクエストを受けたときに実行して実行結果を返しますので、 アクセスされるたびに最終更新日は更新されると思いますが、いかがでしょうか。 念のため、明示的に最終更新日を設定する方法として、 http://www.arielworks.net/articles/2004/0125b こちらの記事が参考になります。 白い枠の中に書かれているPHPのコードが、最終更新日を知らせるHTTPヘッダを送出する物になるのですが、 <?php //必ずファイルの先頭に。 $time_newest = time(); //現在時刻のタイムスタンプ header( "Last-Modified: " . gmdate( "D, d M Y H:i:s", $time_newest ) . " GMT" ); ?> としてやれば常に最新になります。

acchi19740615
質問者

補足

ありがとうございます。この方法だと、FTPソフトでファイルの更新日時を確認したときに、何も変化がないですよね・・・。ファイルの更新日時自体を変更したいのですが、touchで自身を書き換えるのは無理なんでしょうか。。。

関連するQ&A

  • JavaScriptからphp関数の呼び出し

    javaScriptで1秒毎にphpの関数を呼び出しているのですが、 php側で、returnしている日時が動的に表示されません。 何がいけないのか教えて頂けますでしょうか? 色んな参考ページを見ると、phpの関数で動的に 動かせると書いてあるのですが、動的になりません。 -------------------------------------------------------- <jsphptest.htmlソース> <html> <head> <script type="text/javascript"src="jsphptest.php"></script> <script language="javascript"> <!-- function time() { //JavaScriptで日時表示 var now = new Date(); mon = now.getMonth()+1; day = now.getDate(); hou = now.getHours(); min = now.getMinutes(); sec = now.getSeconds(); year = now.getYear(); if (year < 2000) { year += 1900; } if (mon <= "9"){mon = "0" + mon;}; if (day <= "9"){day = "0" + day;}; if (hou <= "9"){hou = "0" + hou;}; if (min <= "9"){min = "0" + min;}; if (sec <= "9"){sec = "0" + sec;}; document.form1.j_tokei.value= year +"/"+ mon +"/"+ day +" "+ hou +":"+ min +":"+ sec; //PHP関数の呼び出し document.form1.p_tokei.value= php_time(); //1秒毎 setTimeout('time()',1000); } // --> </script> </head> <body onLoad="time();"> <form name="form1" mathod=post> JavaScript日時<input type="text" name="j_tokei" size=25><br> PHP日時<input type="text" name="p_tokei" size=25> </form> </body> </html> -------------------------------------------------------- <jsphptest.phpソース> <?php $str .= "function php_time(){"; $str .= "return('".date('Y-m-d H:i:s')."');"; $str .= "}"; echo $str; ?>

  • javascriptとphpの変数のやり取り

    ある該当ページ(mtの検索結果ページ)が拡張子をphpにできず、 <script src=hogehoge.php></script>でphpファイルを読み込んで、 実行したいと思います。 phpを使用している理由はある変数を取得したいのですが、 今回は関係ないので割愛します。 ■以下ソース ・該当ページ(mt-search.cgi) <html> <head> <title>hoge</title> <script type="text/javascript" src="/hogehoge.php"></script> </head> <body> <script> document.write("<p>"+str+"</p>"); </script> </body> </html> ・phpファイル(hogehoge.php) <?php if(test == test){ $str = "成功" }else{ $str = "失敗"; } ?> <script type="text/javascript"> <!-- var str= "<?php echo $str?>"; --> </script> このようにしているのですが、 うまく出力されません。 php側の出力はうまくいっているようなのですが、 ブラウザ側の方でちゃんと変数がわたっていないようです。 画面は真っ白です。 ご教授お願いいたします。

  • javascript php 連携

    よろしくお願いします。 javascriptの『onchange』値をPHPの変数に入れたいと苦戦しています。 <html> <head> <script type="text/javascript"> function hoge1(){ var x = $('str1').options[$('str1').selectedIndex].text; やりたいことはここでPHPの変数『list_a』にjavascriptの変数『x』の値を入れたいです。 } </script> </head> <body> ここに結果表示 <?= $list_a; ?> <select id="str1" name="str1" onchange="hoge1()"> <option>hoge1</option> <option>hoge2</option> <option>hoge3</option> </select> </body> </html> よろしくお願いいたします。 ちなみにAjaxは全くわかりませんのですいません。。。

    • ベストアンサー
    • PHP
  • javascriptからphpの呼び出し

    javascriptの初心者です。宜しくお願い致します。 php5で、開発していますが、javascriptからphpを呼んで、 結果をリアルタイムに画面に表示させる方法が分かりません。 【やりたい事】 1.画面上に、現在の日時を表示させる。 2.5秒毎に、phpを呼び出し(DB接続し結果を取得)して、   その結果を、画面上に表示させる。   ※DBへの接続は、javascript内ではやりたくありません。 下記に、現在時刻を表示するjavascriptがありますが、 この中で、5秒毎に、phpを呼び出したいのですが、 出来るのでしょうか? </head> <script language="Javascript"> <!-- function time_disp() { d = new Date(); document.all.nowdate.value = d.toLocaleString(); window.setTimeout("time_disp()", 1000); } --> </script> <body onload="time_disp();"> <input type="text" name="nowdate" size="30" readonly> <input type="text" name="data1" readonly> ←phpから取得した値1 <input type="text" name="data2" readonly> ←phpから取得した値2 </body>

  • phpファイルに書いたhtmlソースが表示される

    php側で用意した変数にhtmlタグと合わせて $tempHTML=<tr><td>$data1</td><td>$data2</td></tr>"; のように文字列を代入して、表形式でデータを表示させようとしているのですが、 なぜかhtml部分のソースのみがブラウザに表示されてしまいます。 ファイル名"search_result.php" --------------------------- <html> <body> <script type="text/javascript"><!-- function dataFunc(txt){ alert("search_result_data"); document.search_result.search_result_data.value = txt; } --></script> </head> <body> <form name ="search_result" method="post action="./search_result_test.php"> <input type="hidden" name="search_result_data" value=""></input> </form> <script type="text/php"> <?php 処理の記述 ?> </script> </body> </html> --------------------------- と書いて実行させると、 --------------------------- <html> <body> <script type="text/javascript"><!-- function dataFunc(txt){ alert("search_result_data"); document.search_result.search_result_data.value = txt; } --></script> </head> <body> <form name ="search_result" method="post action="./search_result_test.php"> <input type="hidden" name="search_result_data" value=""></input> </form> <script type="text/php"> </script> </body> </html> --------------------------- と表示され、phpの記述(<?php・・・?>)以外のソースがまるまるブラウザで表示されてしまいます。 しかも肝心の処理結果も表示できません。 どなたか原因が分かる方がいらっしゃったら教えていただけますか?

    • ベストアンサー
    • PHP
  • phpエラーについて

    おはようございます。 PHPにて掲示板を作成しています。 (全文は文字数制限にて掲載することができなかったため、主要な部分を掲載しております) 一通り作成した後、 ブラウザから参照したところ、 Parse error: parse error, unexpected ';', expecting '{' in /***/***.php on line 44 が出力されました。 line 44行目は「function convstr ( $str );」の行を指します。 この場合、問題となっているのは、 44行目から 57行目の間と考えてよろしいのでしょうか? もし、違っていたとするならば、どこまで追っていけばよろしいのでしょうか? また、errorに対するデバッグ手法がありましたら、 具体的な手法を教えて頂けないでしょうか? 例:printfを*行目にprint()の構文で設置する。 どうぞよろしくお願いします。 42:<?php 43: //タグ無効化等の処理をする関数 44: function convstr ( $str ); 45: { 46: //タグを無効化する 47: $str = htmlspecialchars ( $str ); 48: 49: //「'」「"」を全角に置換する 50: $str = stripslashes ( $str ); 51: $str = ereg_replace ( "'", "’", $str ); 52: $str = ereg_replace ( """, "”", $str ); 53: 54: //文字列内の改行を<br>に変換する 55: $str = ereg_replace ("\r\n|\r|\n", "<br>", $str); 56: return $str; 57: } 58: 59: //DBに接続する 60: $conn = mysql_connect ( "localhost", "root", "mysql" ); 61: if ( $conn == false ) 62: { 63: print ( "DB接続エラーです<br>\n" );

    • ベストアンサー
    • PHP
  • PHP連動のメニュー

    どなたか教えてください。 ポップアップメニューをつくりたいと思っています。 メニューのタイトルは、PHPで読み込もうと思っております。自動更新させたいということです。 タイトル部分にURLのリンクをはろうと思っています。 しかし、タイトル名を読み込むところまではできたのですが、リンクがうまくいきません...。 こんなソースでやっています。 //タイムラインa0のスクリプト //LoadVarsでphpを読み込む myVars=new LoadVars(); myVars.onLoad=function(){ //splitメソッドをつかって配列に格納p115 var ar1=this.str1.split(","); _root.name1=ar1[1]; _root.name1.link="http://oshiete1.goo.ne.jp"; } myVars.load("++++.php"+rFresh); stop(); (こちらのサイトも参考にしました。 http://www.3enhancedesigners.com/tutorials/flash/autolink/autolink2.asp 「リンクの自動化」) どなたか良い方法をご存じの方がいらっしゃいましたら、ご教授ください。 よろしくおねがいいたします。

  • 設定した日時になったら更新

    質問させてください。 例えば、現在を「2005/04/28」だとして、 以下のような「image」テーブルがあるとします。 name     date ----------------------- image01  2005/04/26 image02  2005/04/30 image03  2005/05/04 image04  2005/05/08 ----------------------- そして、あるPHPファイルに 「image01」ファイルが設定されているとして、 実際に「2005/04/30 12:00:00」という時刻を迎えたら、 「image01」が出力されているソースの部分を 自動的に「image02」に変更したいのですが、 これはタイムスタンプ等を利用して実現する事は可能でしょうか? (dateフィールドに時間を加える事は可能です) この場合は、30日分の更新は可能かもしれませんが、 それを次の「image03」、「image04」も同様に、 順次自動的に更新したいのです。 一応、色々と試してはみましたが上手くいかず、 また、有用な関数が他にあるのでは?と思い質問させて頂きました。 何かお分かりになる方がいらっしゃいましたら 教えて頂けますでしょうか?

    • ベストアンサー
    • PHP
  • PHPでのCookie

    PHPでクッキーを使い、下記のような入力フォームを作りました。 form.phpで入力→form2.phpで正常出力出来るのですが、 form2.phpで一度更新しないと、結果が画面に表示されません。 これをform2.phpを開いた時点で表示されるようにするには、どのように書けばいいのでしょう。 後1つあります。form.phpで 「テスト&1」と書くと「テスト」としか表示されなく、&とそれ以降が記憶されません。 これはなぜでしょうか? お願いします。 【form.php】 <?PHP parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); ?> <html> <form method="post" action="form2.php"> <?PHP echo "名前1<input type=text name=name1 maxlength=16 size=12 value=$set_name1> <BR>ID<input type=text name=p1 maxlength=8 size=6 value=$set1><BR><BR>"; echo "名前2<input type=text name=name2 maxlength=16 size=12 value=$set_name2> <BR>ID<input type=text name=p2 maxlength=8 size=6 value=$set2>"; ?> <input type="submit" value="実行"> </form> </html> 【form2.php】 <?php if ($_POST) { $city1 = $_POST["p1"]; $city2 = $_POST["p2"]; $city_name1 = $_POST["name1"]; $city_name2 = $_POST["name2"]; setcookie ("city", "set1=$city1&set2=$city2",time()+3600*24*90); setcookie ("city_name", "set_name1=$city_name1&set_name2=$city_name2",time()+3600*24*90); } parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); echo $set_name1; echo $set1; echo $set_name2; echo $set2; ?>

    • ベストアンサー
    • PHP
  • PHPとjavascriptを融合させたカウントダウンを作りたい

    PHPとjavascriptを融合させたカウントダウンを作りたい 宜しくお願い致します。 現在、アクセスした時刻から時計が「0秒」を指すまでのカウントダウンを 表示させているのですが、 これを、PHPで取得したサーバー時刻を使ったカウントダウンにしたい と思っています。 現在、利用しているjavascriptは、 ---------------- <script type="text/javascript"> <!-- function tokei() { date=new Date(); second=date.getSeconds(); var str=60-second; document.getElementById("tokei").innerHTML=str; } //--> </script> <body onload="window.setInterval('tokei()',100)"> ---------------- なのですが、これを、 ---------------- <script type="text/javascript"> <!-- function tokei() { second=<?php print date(s) ?>; var str=60-second; document.getElementById("tokei").innerHTML=str; } //--> </script> <body onload="window.setInterval('tokei()',100)"> ---------------- というイメージでカウントダウンさせたいのですが、 何か方法はございますでしょうか?それともPHPを利用する時点で 不可能な話でしょうか? (試しに後述のスクリプトを実践してみた所、案の定PHPで取得した秒で カウントダウンは止まってしまいます) それでは宜しくお願い致します。