実行するたびにb.xmlを出力するPHPファイルx.phpがあります。これを行う方法は、crontabを使用してx.phpファイルを実行することです。問題は、サーバーの設定により、新しいファイルのアクセス許可が400であるということです。したがって、 x.phpが次回実行できるように、ファイルのb.xmlアクセス許可を777に変更する別のcrontab行もあります。
これを複雑にしすぎているような気がします。これを少し簡単にする方法はありますか?
x.phpスクリプトでファイルを777にchmodする必要があります。
b.xmlが作成されたら、次の行を実行します。
chmod('path/b.xml', 0777);
chmodを使用するときは、常に8進数を指定する必要があることに注意してください。
cronジョブを実行するときは、cronジョブを実行しているユーザーに特に注意する必要があります。
通常、共有サーバーでは独自のログインがあり、cronジョブはそのユーザーとして実行されます。あなたへの私の質問-そのユーザーはあなたのウェブサーバーと同じですか?多くの場合、phpは「apache」として実行され、cronは「tanner」として実行される場合があります。その場合、b.xmlをtannerが所有するように設定し、権限400を持っているということは、tannerだけがファイルを変更できることを意味します。これを解決するには、umaskにアクセスできない場合、1つの方法は、cronジョブを変更してWebサーバーとして実行することです。
su -c "php /home/jonathan/public_html/b.php" apache
これは、ユーザーとしてapacheに切り替えることが許可されているかどうかによって、機能する場合と機能しない場合があります。Apacheを実際のWebサーバーのユーザー名に切り替えることを忘れないでください。
さて、それがうまくいかない場合は、777の権限を取得することもできます。共有サーバーでは、パスを知っていれば、そのサーバー上の誰もがそのファイルにアクセスできる可能性があることに注意してください。
OPによって提案された別の方法:
0,10,20,30,40,50 * * * * /usr/bin/wget http://example.com/user/x.php
この方法は、apacheが実行されるapache(または任意の)ユーザーとして常に実行され、次にアクセスされたときにファイルが使用可能になるようにします。
これは機能するはずです:
// set permission
chmod('path/to/b.xml', 777);
// do other stuff
サーバー管理者に、スクリプトがxmlファイルを書き込むフォルダーを所有する新しいユーザーを作成するように依頼します。そのようなユーザーとしてcronジョブを介してphpスクリプトを実行します。フォルダーの所有者としてスクリプトを実行する場合は、phpスクリプトを使用してアクセス許可を変更できます。
この問題を解決するために、私は次のようなcronジョブを作成することになりました。
0,10,20,30,40,50 * * * * /usr/bin/wget http://example.com/user/x.php
これにより、b.xmlを作成したファイルが実行され、スクリプトを実行したユーザーはパブリックであるため、アクセス許可もパブリックのままでした。