CentOS6とApache2をWebサーバーとして実行しているVPSがあります。サーバーでいくつかのPHPスクリプトを実行していますが、ファイルの書き込みを除いてすべてがスムーズに進みます。何らかの理由で、私のPHPスクリプトは、書き込みができないか、ファイルを作成します。
/var/www/html/
が所有するデフォルトの場所root:root
を使用しています。
ディレクトリとファイルを一時的にCHMODしようとしましたが、成功しませんでした。
フォルダのアクセス許可を777に設定しようとしましたが、同じ結果でしたが、成功しませんでした。
これは非常に奇妙なことであり、VPSの管理に関しては私は初心者です。
PHPエラーログ行をphp.iniに追加し、ログを/var/log/
に保存するように指示しました。
CentOSは、何らかの形式のSELinuxがインストールされていることが多いオペレーティングシステムの1つです。 SELinuxを使用することが良いことであるか無駄であるかについては、いくつかの聖戦がありますが、それはあなたがしなければならない選択です。
まだ初心者の場合は、SELinuxをオフにして時間を過ごすことをお勧めします。すべてを実行したら、オプションで有効にして再構成を開始できます。
注意:実際のやり方は逆です。完全にロックダウンされたシステムから始めて、必要なことを1つずつ有効にします。
ファイルの保存に/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');