2016-08-17 23 views
0

試して1週間後に何をすべきか分かりません。 は私がスクリプトは、ウェブサイトがその内容を引くまで開き、サーバー上のpoem.txtに保存します getpoem.phpと呼ばれる私のウェブサーバ上にあるシンプルなPHPスクリプトを持ってwww-data cronでPHPスクリプトが実行されていない

<?php 
    //File to extract the Poem of the day 
    $homepage = file_get_contents('http://SomeWebsite.com/today.php'); 
    $poemALL = substr($homepage,strpos($homepage,"<p>"),strlen($homepage)); 
    . 
    . // extracting the poem and saving it to $poemFinish 
    . 
    file_put_contents("poem.txt", $poemFinish); ?> 

ので、これは非常に単純ですスクリプト(それは私が手動でそれを実行する場合は正常に動作します)。私は、このコマンドではcronをオープンしまし、それは私がgetpoem.phpと詩を与えたすべてのアクセス許可の問題を回避するために

sudo crontab -u www-data -e 

0 3 * * * php /var/www/html/getpoem.php 

を実行する必要があり、コマンドを入力するように、このスクリプトはそののcronでWWW-データユーザで実行する必要があります。このようなTXTはrwx権(私はときに、ライブ、私はそれを変更する必要があります知っているが、これは単なるテストにある)

-rwxrwxrwx 1 www-data www-data 1189 Aug 17 15:07 getpoem.php 
-rwxrwxrwx 1 www-data www-data 1335 Aug 17 15:07 poem.txt 

だから、これは設定ですが、それは実行されません。

私はこれまでに "php"を/ usr/bin/phpに変更して、cronがどのようなPHPであるかを確認しました。私はcronのは、私は

2 * * * */usr/bin/php /var/www/html/getpoem.php | > /var/www/html/test.txt 

にcronジョブを変更ウィッヒを実行していたSHUREが再び何もしなかった作っていたんでした 次の事....ので、私は実行されませんでした

2 * * * */usr/bin/php /var/www/html/getpoem.php | > /tmp/test.txt 

にそれを変更しました私のtmpディレクトリにtest.txtという空の(-.- ")ファイルを作成しました

私のwwwデータユーザーのアクセス権に問題があると思います。すべての私のウェブコンテンツ(phpファイル、webapp usw.)はwww -dataユーザーであり、スムーズに動作します。

www-dataのcronに特別な特権が必要ですか?

+0

この全体の問題の悲鳴[XY問題](http://meta.stackexchange.com/質問/ 66377/what-is-the-xy-problem)を教えてください。あなたは、それが許可の問題であり、あなたがそこから行くということに基づいて推測しています。おそらくそれはおそらく許可エラーではないかもしれませんが、現時点では、SOにはあまり適していないものをランダムに推測することしかできません。 – PeeHaa

+1

あなたが 'file_put_content'を実行するときに、' __DIR __。 '/ poem.txt''を意味する "絶対パス"を使うべきだと思っています。そうでないと、作業ディレクトリが何であるかわからないからです...スクリプト内の作業ディレクトリを設定できます。 – Jakumi

+0

@PeeHaaええ、私はそれをはっきりさせる必要がありますcronは私のPHPファイルを実行しないでください?または私はちょうど私がすでに試みたものを削除する必要がありますか?私はなぜそれが "XYの問題"でなければならないのかわからない。 – GEnGEr

答えて

2

cronからphpを実行している場合、作業ディレクトリは通常、ファイルが置かれているディレクトリではありません。ファイルを書き込むときには通常に相対的なファイルpoem.txtを書き込もうとします。

作業ディレクトリを設定するか、絶対パスを使用する必要があります。ですから、例えば:。

file_put_contents(__DIR__.'/poem.txt'); 

どこ__DIR__は、現在のファイルが入っているディレクトリが含まれている魔法の定数である

関連する問題