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

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にパラメーターを送れるのでしょうか・・。

どなたかお助けいただけませんでしょうか。
お願いします。。

A 回答 (4件)

単なる推測ですが、、、


>このPHPファイルをURL打ち込みしてブラウザに表示
>すると、目的とおりの動作をしますのでソースのミス
>ではないようです。

ここを出発点にすると、Apacheで動作している時と、
Cronで動作している時の権限が違うため動作しないのではないかと、考えます。
(または、パーミッション?)

対応は、動かない関数について、
プロバイダーに苦情を言う。

(この回等については、私が問題を勘違いしている可能性が多々あります。)
    • good
    • 0

こんにちは。


えっと「一部動作していない」の一部以外は動作しているということでしょうか。
いきなりメール。というより簡単なものからやっていきましょう。

で、以下の点が出来るか教えてください。

・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分おきはあくまで実験時の動作確認としてやってくださいね。
    • good
    • 0

>#!/usr/local/bin/php(パス)を入れる必要はあるものなのでしょうか。



cronのスケジュール登録をどのようにされているんですか?
php -f ファイル名
なら必要がありません。
phpのソース自体に実行権を与えて登録している場合には記述しなければなりません。

追伸:
気にされないでと書かれているのですが、
他の方の投稿では\の追加されないので
とても気になります。

この回答への補足

kotaronさまありがとうございます。

* * * * * -q /usr/local/bin/php /home/aaa/public_html/bbb/ccc.php

で1分おきの動作命令にしています。
ちなみにCRONはレンタルサーバのきまりでファイルに直接書き込みしています。

ヒントになるようなご意見でもかまいませんので、お願いいたします。。いきずまりました。

補足日時:2005/03/21 19:12
    • good
    • 0

気になる点はいくつかありますが、


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

この回答への補足

ちなみに今回の場合
PHPファイルの最初に、

#!/usr/local/bin/php(パス)

を入れる必要はあるものなのでしょうか。。
脳がフリーズしてます。

補足日時:2005/03/21 15:50
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/03/21 15:48

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