77

PHPを使用してファイルを作成しようとしていますが、機能していません。これは書き込みアクセス権がないためだと思います(以前は常に問題でした)。フォルダchmod0777を作成して、これが問題であるかどうかをテストしようとしましたが、そのディレクトリ内のすべてのスクリプトが、元に戻すまで500エラーメッセージを返すことになりました。PHPにファイルシステムへの書き込みアクセスを許可して、ファイルを作成できるようにするにはどうすればよいですか?

編集:Apacheを使用したHostgator共有ホスティングでホストされています。

編集2:誰かがコードを要求しました:コードはGDイメージスクリプトです。残りの部分は、以前と呼ばれるすべてのイメージを作成していたのと同じように機能することを知っています。今、私は新しいテキストが追加されたときにそれらを作成し、それらをフォルダに保存しようとしています。私が持っている書き込み行は次のとおりです。imagejpeg(null、$ file、85);

また、壊れたスクリプト(主にtizagからコピーされたもの)であるかどうかを確認するためのテストファイルを作成しました:http://gearboxshow.info/rkr/lesig.jpg/testfile.txt 投稿するかどうか/方法がわかりません)ここに適切なコードがあります。これがPHPスクリプトの内容からPHPタグを除いたものです。)

13,13,1(別行)を返すので、何かを書いたように見えますが、testfile.txtが空白(空白をアップロードした)または存在しない(削除した場合)。

編集3:サーバーはCentOSを実行します。

4

12 に答える 12

63

簡単な方法は、最初に PHP にディレクトリ自体を作成させることです。

<?php
 $dir = 'myDir';

 // create new directory with 744 permissions if it does not exist yet
 // owner will be the user/group the PHP script is run under
 if ( !file_exists($dir) ) {
     mkdir ($dir, 0744);
 }

 file_put_contents ($dir.'/test.txt', 'Hello File');

これにより、アクセス許可に関する手間が省けます。

于 2010-05-24T22:20:50.620 に答える
36

ディレクトリの所有者を apache を実行しているユーザーに設定します。多くの場合、Linuxには誰もいません

chown nobody:nobody <dirname>

この方法では、フォルダーは誰でも書き込み可能ではありませんが、Apache に対しては書き込み可能です :)

于 2010-05-25T02:01:37.280 に答える
32

シンプルな 3 ステップのソリューション

要約:ディレクトリの所有者を、PHP が使用するユーザー (Web サーバー ユーザー) に設定する必要があります


ステップ 1: PHP ユーザーを決定する

以下を含む PHP ファイルを作成します。

<?php echo `whoami`; ?>

Web サーバーにアップロードします。出力は次のようになります。

www-data

したがって、PHP ユーザーはwww-data.


ステップ 2: ディレクトリの所有者を決定する

次に、コマンド ラインを使用して Web ディレクトリの詳細を確認します。

ls -dl /var/www/example.com/public_html/example-folder

結果は次のようになります。

drwxrwxr-x 2 exampleuser1 exampleuser2 4096 Mar 29 16:34 example-folder

したがって、ディレクトリの所有者は ですexampleuser1


ステップ 3: ディレクトリの所有者を PHP ユーザーに変更する

その後、Web ディレクトリの所有者を PHP ユーザーに変更します。

sudo chown -R www-data /var/www/example.com/public_html/example-folder

Web ディレクトリの所有者が変更されたことを確認します。

ls -dl /var/www/example.com/public_html/example-folder

結果は次のようになります。

drwxrwxr-x 2 www-data exampleuser2 4096 Mar 29 16:34 example-folder

したがって、 の所有者はexample-folderPHP ユーザー に正常に変更されました: www-data


終わり!これで、PHP はディレクトリに書き込めるようになります。

于 2018-03-30T00:18:01.383 に答える
10

最初に、次のコマンドを使用して、httpd プロセスを所有しているユーザーを特定します。

ps aux | grep httpd

次のような数行の応答が返されます。

phpuser   17121  0.0  0.2 414060  7928 ?        SN   03:49   0:00 /usr/sbin/httpd

ここでは、1 列目にユーザー名が表示されます。これで、ファイルを書き込もうとしているユーザーがわかりました。この場合はphpuser 、php スクリプトが何かを書き込もうとしているディレクトリのアクセス許可を設定できます。

sudo chown phpuser:phpuser PhpCanWriteHere
sudo chmod 755 PhpCanWriteHere
于 2016-01-27T08:45:33.917 に答える
4

PHP の chmod() を使用して、フォルダーのパーミッションを変更できます。コマンドの使用方法の詳細については、http: //php.net/manual/en/function.chmod.phpを参照してください。

アクセス許可を 777 (誰でも書き込み可能) に設定したときに 500 エラーが発生した場合は、サーバーがそのようなファイルの実行を防止するように設定されていることを意味します。これは、セキュリティ上の理由から行われます。その場合、ファイルに対する最高のパーミッションとして 755 を使用する必要があります。

PHP ドキュメントを実行しているフォルダーに生成された error_log ファイルがある場合は、最後のいくつかのエントリを表示する必要があります。これにより、スクリプトが失敗している場所がわかります。

PHP ファイル操作のヘルプとして、 http://www.tizag.com/phpT/filewrite.phpをリソースとして使用します。

于 2010-05-24T22:25:52.147 に答える
3

HostGator では、ファイルを CMOD 644 に、フォルダを 755 に設定する必要があることがわかりました。技術サポートに基づいてこれを行ったので、HostGator で動作します

于 2011-07-31T19:34:11.440 に答える
3

私は同じ問題を抱えていました:

私は php ディレクトリに 0777 を与えることに気が進まなかったので、0777の権利を持つ tmp ディレクトリを作成し、そこに書き込みが必要なファイルを作成します。

私のphpディレクトリは引き続き保護されています。誰かが tmp ディレクトリをハッキングしても、サイトは通常どおり機能し続けます。

于 2014-12-22T21:00:44.177 に答える
2

chmod では、ファイルの所有権を設定できません。ファイルの所有権を設定するには、chown コマンドを使用する必要があります。

于 2013-03-23T15:44:47.373 に答える