web-dev-qa-db-ja.com

CentOSでファイルを書き込めません

CentOS6とApache2をWebサーバーとして実行しているVPSがあります。サーバーでいくつかのPHPスクリプトを実行していますが、ファイルの書き込みを除いてすべてがスムーズに進みます。何らかの理由で、私のPHPスクリプトは、書き込みができないか、ファイルを作成します。

/var/www/html/が所有するデフォルトの場所root:rootを使用しています。

ディレクトリとファイルを一時的にCHMODしようとしましたが、成功しませんでした。
フォルダのアクセス許可を777に設定しようとしましたが、同じ結果でしたが、成功しませんでした。

これは非常に奇妙なことであり、VPSの管理に関しては私は初心者です。

PHPエラーログ行をphp.iniに追加し、ログを/var/log/に保存するように指示しました。

2
aborted

CentOSは、何らかの形式のSELinuxがインストールされていることが多いオペレーティングシステムの1つです。 SELinuxを使用することが良いことであるか無駄であるかについては、いくつかの聖戦がありますが、それはあなたがしなければならない選択です。

まだ初心者の場合は、SELinuxをオフにして時間を過ごすことをお勧めします。すべてを実行したら、オプションで有効にして再構成を開始できます。

注意:実際のやり方は逆です。完全にロックダウンされたシステムから始めて、必要なことを1つずつ有効にします。

2
pdah

ファイルの保存に/var/www/htmlを使用しないでください。一時ストレージとして使用するためのものではありません。 PHPスクリプトは、生成されたhtmlを返す必要があり、ファイルに書き込む必要はありません。

本当にどこかにデータを保存する必要がある場合は、適切な権限を持つ新しいフォルダーを作成する必要があります。 Linuxでは、多くの場合、nobodyはApacheを実行しているユーザーアカウントですが、www-dataまたは単にApacheにすることもできます。次の方法で、Apacheにそのフォルダーへのアクセスを許可できます。

chown nobody:nobody <dirname>

777(誰でも書き込み可能)のパーミッションでファイルを実行できないようにApacheが設定されている場合、フォルダーに設定するパーミッションが多すぎるとエラーが発生する可能性もあります。

すべてを正しく行うための非常に簡単な方法は、最初にPHPディレクトリ自体を作成することです:

<?php
 $dir = 'path-to-folder/myFolder';
 if ( !file_exists($dir) )
   mkdir ($dir, 0777);
 file_put_contents ($dir.'/test.txt', 'Hello World');
0
harrymc