人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPについて質問です。

下記のスクリプトは
「当該ファイルが存在しなければ
?ファイルを新規で作成、
?test2.php のPHPスクリプトを実行した結果として出力される内容を保存
?HTTPヘッダを送信する」
というスクリプトです。

if(file_exists($hoge)==false){
$fl = fopen($hoge,"a+");
ob_start();
include('test2.php');
$contents = ob_get_contents();
ob_end_clean();
fputs($fl,$contents);
fclose($fl);
}
header("Location: " . $hoge);

上記のスクリプトに、
「当該ファイルが存在した場合、
?毎月1日以降を過ぎてからスクリプトを実行した場合上のスクリプトの?を実行
?それ以外は何もしない」
というスクリプトを付け加えてください。
つまり、このスクリプトで実行したファイルを定期的に更新したいのです。

なお、質問者はまだPHPの学習を初めて間もない初心者なので、
自分のやりたいことをうまく質問することもままなりません。
不明瞭な場合はその旨コメントをいただければ幸いです。
なお、回答はコピペしてそのまま使えるものをお願いします。

以上、よろしくお願いします。


●質問者: taroemon
●カテゴリ:コンピュータ
✍キーワード:Fl hoge HTTP PHP コピペ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● tezcello
●36ポイント

「当該ファイルが存在した場合、

1.毎月1日以降を過ぎてからスクリプトを実行した場合上のスクリプトの?を実行

2.それ以外は何もしない」

というスクリプトを付け加えてください。

(機種依存文字は置換えました)

a.ファイルが存在しない場合は、test2.php の実行結果を、そのファイル名で書きこむ

b.ファイルが存在する場合でも、スクリプトの実行された日にちが2日以降であれば上記と同じ


という事だと思います。

if(file_exists($hoge)==false or date('j') > 1){
$fl = fopen($hoge,"a+");
ob_start();
include('test2.php');
$contents = ob_get_contents();
ob_end_clean();
fputs($fl,$contents);
fclose($fl);
}
header("Location: " . $hoge);

のようにすればよいでしょう。

ですが

> つまり、このスクリプトで実行したファイルを定期的に更新したいのです。

毎月1日このスクリプトを実行すると全く更新されない事になりますが大丈夫ですか?

◎質問者からの返答

ご回答ありがとうございます。

いつも本当に助かってます。


PHPの質問と言うよりは日本語がおかしいですね。

作成されたファイルを一ヶ月に一回くらい更新したいというのが、この質問の意図です。

したがって、それをくんでいただければどのようなものでもかまいません。

1日がだめというなら2日以降に実行します。というお返事で大丈夫でしょうか?


コメント欄にもお返事しておきました。

またお気づきになられたことがありましたら、お時間のあるときにでもお返事ください。


2 ● Numeric
●36ポイント

これで動くはずです。


//ファイルがないか、ファイル更新月の当月でなければ
if( ( ! file_exists($hoge) ) || ( date("Ym",filemtime($hoge)) != date("Ym") ) ){
//ファイルがあってもなくても新規作成
$fl = fopen($hoge,"w");
ob_start();
include('test2.php');
$contents = ob_get_contents();
ob_end_clean();
fputs($fl,$contents);
fclose($fl);
}
header("Location: " . $hoge);

filemtime($filename));
◎質問者からの返答

ご回答ありがとうございます。

勉強になりました。


3 ● KID the Euforia
●36ポイント

要件があまりはっきりとわからないのでコメントでのご回答とご質問の文言通りに作りました。

やっていることはスクリプトの実行日時を保存しておいて比較するというものです。

<?php
// スクリプト実行日時保持ファイル名
$time_file = 'last_time';

/* 1. 当該ファイルが存在しなければ */
if (file_exists($hoge) == false) {
 /* 1-1. ファイルを新規で作成 */
 $fl = fopen($hoge, "a+");
 
 /* 1-2. test2.php のPHPスクリプトを実行した結果として出力される内容を保存 */
 /*ob_start();
 include('test2.php');
 $contents = ob_get_contents();
 ob_end_clean();*/
 //fputs($fl, $contents);
 fwrite($fl, "hogeファイルです");
 fclose($fl);
}
else { /* 2. 当該ファイルが存在した場合 */
 /* 2-1. 毎月1日以降を過ぎてからスクリプトを実行した場合上のスクリプトの?を実行 */
 // 前回スクリプト実行日時を取得
 $last = 0;
 if (file_exists($time_file)) {
 $handle = @fopen($time_file, "r");
 $last = fgets($handle);
 fclose($handle);
 }
 else { // 日時保存ファイルがない→初回起動
 $last = -1;
 }
 // 月を比較
 if (date('M') != date('M', $last) || $last = -1) {
 // 月が違えばその月で最初の起動
 // 1-2. test2.php のPHPスクリプトを実行した結果として出力される内容を保存
 ob_start();
 include('test2.php');
 $contents = ob_get_contents();
 ob_end_clean();
 fputs($fl, $contents);
 fclose($fl);
 }
 else {
 // 2-2. それ以外は何もしない
 // このelseブロックはなくてもいいです
 }
}

// スクリプト実行日時を保存
$handle = @fopen($time_file, "w");
fwrite($handle, time());
fclose($handle);

/* 1-3. HTTPヘッダを送信する */
header("Location: " . $hoge);
?>
◎質問者からの返答

ご回答ありがとうございます。

私の質問の仕方が不明瞭で済みません。

これを参考にしてがんばってみようと思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ