2017-09-20 10 views
0

私は毎時いくつかのものを作った簡単なPHPスクリプトを書いています。ログファイルを書きます。

問題はcronjobがログファイルに書き込んでいませんが、許可の問題ですか?パスの問題ですか?
php cronjobはファイルに書き込まない

私はsitegroundによるホスティングサービスを提供しています。スクリプトファイルには、書き込み、読み取り、実行の権限があります。
私はすでにファイルを書き込まずに私に電子メールを送信し、実行中のcronジョブを設定しようとしました。
おかげ

は、これは私のコードです:

// 
//some stuffs here 
// 
$file='www.domainname.com/logfile.csv'; 
$handle = fopen ($file, "w"); 
fwrite($handle, "hello, i done some stuffs"); 
fclose($handle); 
+0

これは、クローンジョブの問題か、PHPの問題ですか?自分で実行するとファイルは機能しますか? – Andreas

+0

私は 'fwrite'を使ってWebサーバー上にあるファイルを編集できないと確信しています – gogaz

+0

なぜ、この関数は@gogazになりますか? * permissions *の問題がなければ、 'fwrite()'を使ってWebサーバー上のファイルを編集して書きます。 –

答えて

0

あなたは、ファイルシステム上のファイルへの絶対パスまたは相対パスを使用する必要があります。

例: - 一般的にWebサーバのディレクトリに書き込み可能なファイルを持つ

$handle = fopen($_SERVER['DOCUMENT_ROOT'] . '/logfile.csv'); 
+0

ありがとう、ファイルパスを変更しました。スクリプトを手動で実行するとスクリプトがファイルを書きましたが、スケジュールされたcronjobはまだファイルを書きません。 –

+0

ファイルのアクセス許可を確認してください – Arun

+0

うん、私はそれらを変更しました:書き込み(ユーザーと世界)が何もありません。私はftpを使うのと同じように何かを変えるべきでしょうか?あなたはどうしていますか?エラーログはありません –

0

は悪い考えです。プログラムがファイルに書き込むことができる場合、Webサーバーはファイルに書き込むこともできます。これにより、誰かがWebサーバーを介してファイルを上書きする可能性があります。最高でも、データが上書きされないようにします。最悪の場合、リモートでコードが実行されます。

書き込み可能なファイルをWebサーバーディレクトリの外に置く方がよいでしょう。

<Parent directory> 
      <Place for writable files> 
      <Web server directory> 

プログラムでは、Webサーバーから実行する場合、ファイルへのパスを指定するだけです。

シェルからそれを実行しているよりも少し異なるのcronから実行相対パス

$relitivePath = '/../writeDir'; 
$handle = fopen($_SERVER['DOCUMENT_ROOT'] . $relitivePath . '/logfile.csv'); 

フルパス

$fullPath = '/somedir/ParentDir/writeDir' 
$handle = fopen($fullPath . '/logfile.csv'); 

。あなたが使用している環境は、あなたが完全なパスをリストアップしたり、環境を設定しなければならないときに、あなたが持っているときのように設定されていません。

$fullPath = '/somedir/ParentDir/writeDir' 
$handle = fopen($fullPath . '/logfile.csv'); 

にssh'edすると、あなたの完全なパス

を取得するには、次のファイルがあるディレクトリに

CD。

pwdを実行すると、現在の作業ディレクトリのパスが出力されます。

上記のようにそのパスを使用してください。

プログラムでは、エラー報告をオンにすることをお勧めします。

また、cronから呼び出したプログラムをWebディレクトリに入れたくない場合もあります。

サービスプロバイダーには、cronの出力を電子メールで送信する方法があります。それはエラー報告に役立ちます。

関連する問題