2

PHP 関数 fwrite() で問題が発生することが予想されます

$filename = 'rss.xml';  

if (file_exists($filename)) {
    echo "The file $filename exists";
} 

if (is_writable($filename)) {
    $fp = fopen($filename, 'w');
    fwrite($fp, $feed);
    fclose($fp);
 }
else{
    echo '<br />not writable..';
    if(!is_readable($filename)){
    echo ' and not readable!';
    }
}

スクリプトを実行すると、次のように返されます。

The file rss.xml exists
not writable.. 

rss.xml の chmod は 755 で、セーフモードはオフです。

私は (mt) mediatemple.com で (dv) でホストされており、(gs) ソリューションでホストされていたとき、スクリプトは正常に動作していました。

何が悪いのかわかりません=/

4

6 に答える 6

4

755意味 :

  • rwx: 所有者の読み取り、書き込み、実行
  • r-x: グループの読み取り、実行
  • r-x:その他の読み取り、実行

したがって、誰もがそのファイルを読み取る(および実行する)ことができますが、所有者だけがそのファイルに書き込むことができます。

ファイルを所有しているユーザーが、PHP スクリプトを実行しているユーザーではない可能性があります。つまり、スクリプトが Apache のユーザーによって実行されている間(多くの場合www-data)、ファイルは誰のものである可能性がありますか?


最初のアイデアは、ファイルを削除して、スクリプトで再作成を試みることです。適切に再作成された場合(つまり、Apache がwriteそれを含むディレクトリに対して必要な権限を持っていることを意味します)、その後、それを変更できるはずです。

それ以外の場合は、スクリプトがファイルの所有者以外の別のユーザーによって実行されている場合は、次のwrite権限を付与してみてください。トリックを行う必要があります。otherchmod o+w rss.xml

于 2010-01-23T11:07:47.730 に答える
0

ファイルを保持するためのフォルダーを 0777 パーミッションで作成し、その中にファイルを低いパーミッション レベル 0644 で配置します。したがって、すべての人がフォルダーにアクセスできますが、すべての人がファイルを変更できるわけではありません (0644) = それが私が見つけた最高のものです解決。他の安全性の低いソリューションは、フォルダーを作成せず、ファイルのアクセス許可を 666 に変更するか、777 を好む人もいます = 適切な安全なソリューションではありません

于 2012-01-13T18:11:17.157 に答える
0

755 は、ファイルの所有者はファイルを変更できますが、他のユーザーは変更できないことを意味します。所有者はおそらく Web サーバーではなく、あなた自身 (あなたの FTP アカウント?) であるため、PHP はそれを変更できません。より広い権限を与えるようにしてください。775 から始めて、うまくいかない場合は 777 を試してください。

FTP アカウントと同じユーザーとして Web サーバーを実行する Web ホストがいくつかあるため、ファイルのアクセス許可に関するサポートの質問を受けませんが、私の意見では、これは大きなセキュリティ ホールです。Mediatemple は、Web サーバーを FTP アカウントとして実行しないという正しいことをしていると思います。

于 2010-01-23T11:10:39.860 に答える
0

編集: Pascal Martin や他の人が指摘しているように、755 はファイルが正当に書き込み可能でないことを意味し、777 または所有者を変更する必要があるかもしれないことを見落としていました。すべてが正しく設定されていて、is_writable() が false を返す場合に備えて、この回答を残しています。これは私が想定していたことです。

奇数。これについては、is_writable User Contributed Notesに短い議論があります。そこに投稿した人にとっては、PHP 5に切り替えることで解決しました(ただし、サーバー/ PHP /どのプロセスがどのユーザーの問題として実行されるかだと思います)。

あなたが試すことができること:

  • posix_getuid()を使用して、PHP が実行しているユーザーを調べる
  • 書き込もうとしているファイルの所有者を、その正確なユーザー(グループだけでなく) に変更します。
  • それが機能する場合、それはおそらく何らかの不具合であり、 fopen() を試して、失敗した場合はエラーメッセージをインターセプトすることを検討する必要があるかもしれません.

そしてもちろん、チェックをバイパスすると、ファイルは実際に fwrite() 可能ですか??

于 2010-01-23T11:13:41.493 に答える
0

異なるホスティングでは、PHP が実行され、ファイルにアクセスします。

所有者または

グループまたは

世界

最初のバリアントは、セキュリティに最適です。

その場合、ファイルパーマを 644 に設定し、最後のケースでは - 666 に設定する必要があります。

そこにデータを保存するだけなのに、なぜ 777 を設定してファイルを実行可能にするのでしょうか?

于 2010-01-23T12:12:07.797 に答える
-1

CHMOD 0755 は、ファイルの所有者のみが書き込みできることを意味します (グループと他のユーザーは読み取りと実行が可能です)。PHP のユーザー/グループに応じて、CHMOD を 0775 または 0777 に変更する必要があります。

于 2010-01-23T11:08:56.650 に答える