Ubuntu 12.04を使用したときに、php fopen(..)でファイルを作成できました。しかし、ubuntu 14.04を渡すため、phpでファイルを作成できません。既存のファイルを開いて読み取りまたは書き込みができます。しかし、許可が拒否されたため、新しいファイルを作成できません。
fopen(../../../../../Desktop/file): failed to open stream: Permission denied in /var/www/html/createFolder.php on line 17
Cannot open file: ../../../../..//Desktop/file" error is occured.
$my_file = ".." . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . "home" . DIRECTORY_SEPARATOR . "username" . DIRECTORY_SEPARATOR . "Desktop" . DIRECTORY_SEPARATOR . "file";
$handle = fopen($my_file, 'w') or die('Cannot open file: '.$my_file);
$data = 'New data line 1';
fwrite($handle, $data);
$new_data = "\n".'New data line 2';
fwrite($handle, $new_data);
エラーは、アクセス許可の問題が原因で発生します。
ユーザーのデスクトップディレクトリにファイルを作成します。
スクリプトはyour userによって実行されていません。apahceのユーザーによって実行されています。これは通常www-data
です。ほとんどの場合、このユーザーには、ユーザーのホームディレクトリにファイルを作成する権限がありません。
したがって、ApacheユーザーにDesktop Directorへの書き込みアクセスを許可する必要があります。
注:これは悪い考えですしかし、いくつかの方法で行うことができます。
1.Apacheユーザーをユーザーグループに追加します。
2.デスクトップディレクトリのアクセス許可を変更して、誰でも書き込みできるようにします(おそらく最悪の考えです)。
3. www-data
グループに自分を追加し、デスクトップフォルダーのグループ所有者をwww-data
に変更します。
これらの手法は、ホームディレクトリを他のユーザーに公開するため、注意してください。
無関係:なぜこれほど多くの..
を使用するのですか?絶対パスを使用してください。
../../../../../Desktop
にファイルを作成する権限が必要です。
なぜなら、PHPコードはApacheユーザーprivaliageで実行されるからです。
必要な場合は、次のコマンドで確認および変更する必要があります。
ls -l ../../../../../Desktop
Sudo chmod 777 ../../../../../Desktop
または
Sudo chown xxx ../../../../../Desktop
xxxはApacheユーザー名です。