• 締切済み

cron は動作しているのですが、一部動作していない命令が・・

cronでPHPファイルを定期動作させるようにしています。下記はそのPHPファイルの内容です。 上部の「メールの送信」は時間通りされるのですが、下部の関数「fsockopenやfputs」あたりが動作していないようなのです。 このPHPファイルをURL打ち込みしてブラウザに表示すると、目的とおりの動作をしますのでソースのミスではないようです。cronでfsockopenは動作しないとか・・あるのでしょうか。ちなみにfsockopenで行いたいのは指定のURLにパラメーターを送る動作です。 //----メールの送信----- //言語の設定 mb_language(\"japanese\"); mb_internal_encoding(\"Shift_JIS\"); //登録メールの送信 $to=\"aaaa@aaa.jp\"; $subject=\"時間動作確認\"; $message=\"動いてますよ!\"; $header=\"from:info@aaa.jp\"; $send_mail=mb_send_mail(\"$to\",\"$subject\",\"$message\",\"$header\");   ( 中 略 ) //クエリメソッドを作成 $url = \"http://xxx.jp/aaa/bbb.php //リクエストラインを作成 $request = GET.\" \".$url.\" HTTP/1.0\\r\\n\"; $request .= \"Host: \".$URL[\'host\'].\"\\r\\n\"; $request .= \"User-Agent: PHP/\".phpversion().\"\\r\\n\"; $request .= \"\\r\\n\"; //WEBサーバへ接続 $fp = fsockopen(\"xxx.jp\", 80); //接続に失敗した時の処理 if (!$fp) { die(\"ERROR\\n\"); } //要求データ送信 fputs($fp, $request); //接続を終了 fclose($fp); 説明が下手ですいません。 どうしたら指定のURLにパラメーターを送れるのでしょうか・・。 どなたかお助けいただけませんでしょうか。 お願いします。。

みんなの回答

回答No.4

単なる推測ですが、、、 >このPHPファイルをURL打ち込みしてブラウザに表示 >すると、目的とおりの動作をしますのでソースのミス >ではないようです。 ここを出発点にすると、Apacheで動作している時と、 Cronで動作している時の権限が違うため動作しないのではないかと、考えます。 (または、パーミッション?) 対応は、動かない関数について、 プロバイダーに苦情を言う。 (この回等については、私が問題を勘違いしている可能性が多々あります。)

すると、全ての回答が全文表示されます。
回答No.3

こんにちは。 えっと「一部動作していない」の一部以外は動作しているということでしょうか。 いきなりメール。というより簡単なものからやっていきましょう。 で、以下の点が出来るか教えてください。 ・TelnetかSSHでサーバに接続出来ませんか? ・PHPではなくて、シェルで出来ませんか? ・PHPへのパスはあっていますか? ・パーミッションが実行可能になっていますか? ・<? ?>で囲っているか(<?PHPも) ブラウザがで確認したい。と、いうのなら以下の方法の方が正確でしょう。 --- URLアクセスして確認するプログラム /home/tarou/public_html/url.php <? System("/usr/bin/php /home/usr/test.php" , $st); print"\n<BR>"; if ( $st == 0 ) print "成功"; else print "失敗"; ?> --- cron で実行させたいプログラム /home/usr/test.php ------------- --- FTPでアップしたあと実行権限をつけること! <? print "aaaaaaaaaa"; ?> -------------------------------------------------------------------- で、ブラウザで http://hogehoge.co.jp/~tarou/url.php とアクセスして aaaaaaaaa 成功 と出力されれば、今度は /home/usr/test.php を cronで登録したいプログラムに変更してやってみてください。 失敗とでた場合は "/usr/bin/php /home/usr/test.php" のPHPへのパスの部分を変更してみてください。 ※注意 cron は失敗するとエラーがメールで管理人のところに行くような設定になっている可能性があります。1分おきはあくまで実験時の動作確認としてやってくださいね。

すると、全ての回答が全文表示されます。
  • kotaron
  • ベストアンサー率61% (8/13)
回答No.2

>#!/usr/local/bin/php(パス)を入れる必要はあるものなのでしょうか。。 cronのスケジュール登録をどのようにされているんですか? php -f ファイル名 なら必要がありません。 phpのソース自体に実行権を与えて登録している場合には記述しなければなりません。 追伸: 気にされないでと書かれているのですが、 他の方の投稿では\の追加されないので とても気になります。

hachimitsu2000
質問者

補足

kotaronさまありがとうございます。 * * * * * -q /usr/local/bin/php /home/aaa/public_html/bbb/ccc.php で1分おきの動作命令にしています。 ちなみにCRONはレンタルサーバのきまりでファイルに直接書き込みしています。 ヒントになるようなご意見でもかまいませんので、お願いいたします。。いきずまりました。

すると、全ての回答が全文表示されます。
  • kotaron
  • ベストアンサー率61% (8/13)
回答No.1

気になる点はいくつかありますが、 その前に、ソースがaddslashesされているはどうしてですか? このままということはないと思いますが、 投稿用に\を付加したんでしょうか?

hachimitsu2000
質問者

お礼

?? たしかに・・。PHPファイルには書いてないのにここへの投稿には¥が入ってますね。。入れた覚えがないのですが。すいません、お気になさらないで下さい。

hachimitsu2000
質問者

補足

ちなみに今回の場合 PHPファイルの最初に、 #!/usr/local/bin/php(パス) を入れる必要はあるものなのでしょうか。。 脳がフリーズしてます。

すると、全ての回答が全文表示されます。

関連するQ&A