PHPの777許可ファイルでfopenを実行すると許可が拒否されました


3

Imはphpやファイルのパーミッションに慣れていません。しかし、私は非常に単純なスクリプトをセットアップした新しいサーバーに移行しました。

スクリプトが実行されるフォルダーは、ドキュメントルートにあります。フォルダーのアクセス許可は755に設定されます。

フォルダーの所有者はgstaです。ファイルの所有者はgstaです。

error_reportingをオンにして、以下を取得しています:

Warning: fopen(log.txt): failed to open stream: Permission denied in /var/www/html/log.php on line 13

私はもう試した:

chmod("log.txt", 0777)

PHPでも許可が拒否されます。

終わったよ:

ps -u | grep httpd

そして得た:

gsta      1012  0.0  0.0 108608   808 pts/3    S+   22:45   0:00 grep --color=auto httpd

コード:

$filename = 'log.txt';
$handle = fopen($filename,"a+");
echo "fh:" . fwrite($handle, $payload . "\n") . $handle . "<br/>";
fclose($handle);

問題ではありませんが、PHPセーフモードはオフです

ファイルの所有者をnobodyに設定しようとしました(apacheはしばしばnobodyの下で実行されます。また、所有者をapacheに設定しようとしました。

私はグーグルでのすべての投稿とその基本的なことを常に見てきました。これは、別のサーバーで動作することがわかっているスクリプトです。この問題の原因となる設定を探して、php.iniをチェックしてみました。ファイルを削除しようとしました(その場合、ファイルを作成する必要があるため)

誰にもアイデアはありますか?私は考えることができるすべてを試しました。


apacheを書き込むには、許可が必要です。または、書き込みを行うフォルダに777許可を設定する必要があります
イブ

$ chmod 0777 log.txt使用する代わりに実際に許可を変更してみましたchmod()か?

あなたがすることはできませんchmodあなたではありません任意のファイル。または、この場合、それはWebサーバーユーザーではありません(phpを使用して行う場合)。

回答:


6

SELinuxのようなセキュリティ関連のものがこれらのアクションを停止した可能性はありますか?

同様の問題にsetenforce 0遭遇し、SELinuxをシャットダウンするコマンドが問題を解決しました。


1
白髪を節約してくれてありがとう。(私はRedHatを使用しています。アクセス許可の問題を解決しようとしている人のためです)
マイク

2

httpdまたはapacheユーザーは異なります。スクリプトからApacheユーザー名を確認してください

<?php echo exec('whoami'); ?>

関数がphp.iniで禁止されていない場合にのみ可能です。
CSchulz

1

何ができるのかわかりませんが、スクリプト内からファイルを作成してみました。ファイルの名前を変更し、fopenが読み書きモードに設定されていることを確認し(これで問題ありません)、phpで作成してください。

それでもうまくいかない場合は、フォルダのアクセス権が間違っています。フォルダを777に設定してみてください

また、何らかの理由で私のボックスでは、chmod、00777に2つのゼロを使用する必要があります


Androidでこの「fopen許可が拒否されました」という問題がありました。chmod 0777 path/dir助けた。
18446744073709551615

1

「log.txt」は、777に設定しているファイルが同じであることを確認していますか?それへのパスがなければ、ページがあなたのサイトではなくあなたのサイトのルートディレクトリから実行されていると考えている場合、その方法でエラーが発生する可能性がありますなぜそうなるのか、何がいけないのか、私はこれまでに考えたことがありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.