0

サイト マップを作成し、mysql から生成した php ファイルで作成します。ホストを変更しましたが、ファイルへの書き込みに問題があります。私は何かを理解することはできません。これが私の例です:

<?php 
$xml = 'bla bla xml'; //... some xml generating code
$fp = fopen($_SERVER['DOCUMENT_ROOT'].'/my_site_map.xml', 'w');


   if($fp)
      echo 'we opened it';
   else
      echo 'we failed';

   $fwrite=fwrite($fp, $xml, strlen($xml));

   if($fwrite==false)
      echo "another fail";

   fclose($fp);

   echo "we done";

?>

問題は、私のファイル my_site_map.xml にはパーミッション 664 (rw-rw-r--) があり、ブラウザーからこの php ページを開くと、このスクリプトを使用できないため、これを実行しようとすると、見てみましょう:「私たちは別の失敗をしました」; しかし、これを crontab で開いてログ ファイルを見ると、次のように表示されます。私はまさにこれが欲しいのですが、主な問題はファイルが書き換えられていないことです。なんで?どうすればこれを修正できますか?ありがとう。

私のサーバーはApacheではなくnginxです。この情報が価値があるとは思いませんでした

4

2 に答える 2

2

コメントするのに十分な担当者がいないので、これは答えでなければなりません。

私は暗闇の中で突き刺すつもりです.ファイルはあなたのユーザーまたはルートによって所有されており、ウェブサーバーを実行しているプロセスではありません. また、Web サーバー プロセスが実行されているグループが所有するファイルでもありません。

したがって、実行中の apache(?!) プロセスが所有するファイルを chown/chgrp するか、chown apache file などのファイルを設定するか、chmod 666 ファイルなど、全員に書き込み権限を与えるようにファイルを設定します。

実行可能ファイルであり、誰でも実行できるようにする場合を除き、上記のコメントのように chmod 777 を実行しないでください。最初の解決策は、ファイルへの読み取りアクセス権を誰にでも与えるよりも優れた方法です。

編集:上記の元の回答のコメントへのコメントで、ファイルが実行可能ファイルでない場合は、許可のために 7 を与えないでください。6 は読み取り/書き込み可能であり、書き込み用に開いているテキスト ファイルに適しています (それに関しては 2 でも構いません)。

編集 2: fopen 関数が try catch ブロックで実行する例外をキャッチしてみてください。

try { 
    $fp = fopen($_SERVER['DOCUMENT_ROOT'].'/my_site_map.xml', 'w'); 
} catch (Exception $e) { 
    echo "The error is" . $e->getMessage(); 
}
于 2013-02-20T01:22:48.033 に答える
0

PHPコードについては、その場で変更するためのリンクがあります。編集したものに変更してから、必要に応じて元に戻すことができます。

http://php.net/manual/en/function.chmod.php

http://php.net/manual/en/function.chown.php

http://php.net/manual/en/function.chgrp.php

例は、ドキュメントの各リンクに含まれています。自分の作業に最適な権限を見つけてください。パーミッションは最終製品 (Web アプリ、ページなど) に大きく依存するため、万能のパーミッションはありません。

于 2013-02-20T01:28:07.930 に答える