- ベストアンサー
phpで自分自身の更新日時を書き換える
phpでファイルへアクセスがあった際に、自分自身の更新日時を、現在の日時に書き換えたいのですが、うまくいきません。以下のソースを</body>タグの前に入れてますが、ダメです。 どうしたらいいでしょうか。 <?php $fn=str_replace("/","",$_SERVER['SCRIPT_NAME']); $tm=time(); touch($fn,$tm); ?>
- みんなの回答 (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); //ファイルを閉じる ?> といったように、自分自身を全部取得して、全部書きなおす処理。 テキストファイルに書き込みとかが出来るのであればこれでもできそうですがいかがでしょう。
その他の回答 (4)
- hogehoge78
- ベストアンサー率80% (433/539)
一度パーミッションを777にしてみてはいかがでしょう。
補足
上位フォルダも含め777にしてみましたが、効果ありませんでした。他のサイトで見たので、ユーザーに問題があるかもとwebツールのアップローダー(CGI)でファイルをアップロードしてみましたが、これも効果なしです。
- hogehoge78
- ベストアンサー率80% (433/539)
回答遅くなりましたが、 私の記述したもので、ローカル環境(Win7 PHP5.3.1)及び、レンタルサーバ(さくらインターネット)で確認しましたが タイムスタンプは更新されるようでした。 FTPソフトは、キャッシュとか残してたりしてませんか? 更新ボタンとか押してみてもダメでしょうか。
補足
遅くなりました。 ソフトはHPビルダー付属のものを使用しています。キャッシュはのこっていないようで、更新ボタンを押してもダメです(上書きしたファイルをアップロードすると更新されますので)。 ファイルは.htaccessによりhtml拡張子を利用しています。 (.htaccessファイルにAddType application/x-httpd-php .htm .htmlを記載) パーミッションは644です。 サーバは美ら海サーバを利用しています。 phpバージョンはVer.5.1.6です。 .htaccessはそのままに拡張子phpにしてもダメでした。 どこかに問題があるのでしょうか? 尚、どうもtouchコマンドの戻り値がfalseになっているのでエラーになっているようです。touchコマンドで空ファイルを作成しようとしてもエラーが出るので、ここに問題がありそうです。 phpのバージョンも異なるようですのでここも問題でしょうか?
- hogehoge78
- ベストアンサー率80% (433/539)
>FTPソフトでファイルの更新日時を確認したときに、何も変化がないですよね・・・。ファイルの更新日時自体を変更したいのですが、touchで自身を書き換えるのは無理なんでしょうか。。。 そういうことなら、単純に記述したパスの書き方に問題があるという話なので、 <?php $fn = __FILE__; //この定数は自分自身のローカルのフルパスが含まれてます。 touch($fn, time()); ?> これでいけると思います。
補足
頂いたソースを試してみましたが、更新日時は更新されませんでした。。。
- hogehoge78
- ベストアンサー率80% (433/539)
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" ); ?> としてやれば常に最新になります。
補足
ありがとうございます。この方法だと、FTPソフトでファイルの更新日時を確認したときに、何も変化がないですよね・・・。ファイルの更新日時自体を変更したいのですが、touchで自身を書き換えるのは無理なんでしょうか。。。
お礼
flockはエラーが出るので削除しました。その他はパーミッション646で動きました。うまく書き換えできているようです。 結局touchが動かないのとflockがきかない原因は不明でしたが、目的は達成できました。 最後まで丁寧な回答、ほんとうにありがとうございました。