電子書籍の厳選無料作品が豊富!

PHPプログラム上で「URLを直接叩く(GET出来る)コマンド」についての質問です。
「ファイルのタイムスタンプが過去24時間より新しかったらメールCGIを実行する」というphpを作ってみました。
しかしながら、実行すると、「Script timezone differs from ini-set timezone.1289040460128896920024時間以内なのでメール送信しました.」とスクリプトが実行(タイムスタンプも取得された)はずなのですが、肝心なメールが飛んできません。
下記のソースをご確認頂き、不味い点をご指摘いただけませんでしょうか?

尚、cgiそのものはhttp://hoge.com/test/form.cgi?&act=2をブラウザから直接URLで叩くと、メールが飛ぶようになっていますのでcgiの不具合ではありません。
宜しくお願い致します。
環境は、Cent OS Apache/2.2.3 php 5.1.6 です。

ソースは下記です。
<?php
date_default_timezone_set('Asia/Tokyo');
$script_tz = date_default_timezone_get();
if (strcmp($script_tz, ini_get('date.timezone'))){
echo 'Script timezone differs from ini-set timezone.';
} else {
echo 'Script timezone and ini-set timezone match.';
}
echo filemtime("./data/bbs.cgi");
echo strtotime ("yesterday");
//日付をstrtotime()で変換して比較します
if (filemtime("./data/bbs.cgi") > strtotime ("yesterday")) {
$command = `http://hoge.com/test/form.cgi?&act=2`;
echo '24時間以内なのでメール送信しました.';
}else{
exit( "PHPスクリプト終了!!" );
}
?>

試行錯誤的に、$command = `http://hoge.com/test/form.cgi?&act=2`;の部分を
echo $url = $_GET["http://hoge.com/test/form.cgi?&act=2"];とか
header('Location:http://hoge.com/test/form.cgi?&act=2')とかに変更してみましたが、やはり駄目でした。
$_GETについては、フォーム上で使うイメージがあり、上記のようなスクリプト内への記載方法が分かりません。宜しくお願い致します。
尚、yahoo知恵袋にも質問をしたのですが、知恵袋は質問のやり取りが出来ない仕様のため、解決に至らず一旦クローズドしてこちらでお聞きする次第です。ダブルで質問している訳ではございませんので宜しくお願い致します。

A 回答 (1件)

サーバのOSが何かわかりませんが、少なくとも '

http://hoge.com/test/form.cgi?&act=2'
いうコマンドは無いでしょう。

なので
$command = file_get_contents( 'http://hoge.com/test/form.cgi?&act=2' );
とか、サーバが wget コマンドを利用出来るのであれば
$command = `wget http://hoge.com/test/form.cgi?&act=2`;

など、HTTPリクエストを発行するようにしないとダメでしょうね。

また、PHPが動いているサーバとCGIが動いているサーバが、
NATされている同一ネットワーク内にあるサーバ同士の場合は、
内部のIPとかで通信しないとだめかもね。
    • good
    • 0
この回答へのお礼

有難うございました。file_get_contents で解決しました。
本当に大変助かりました。宜しくお願い致します。

お礼日時:2010/11/07 18:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!