web-dev-qa-db-ja.com

新しいファイルの作成時に許可が拒否されました

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);
1
Mert Özoğul

エラーは、アクセス許可の問題が原因で発生します。

ユーザーのデスクトップディレクトリにファイルを作成します。

スクリプトはyour userによって実行されていません。apahceのユーザーによって実行されています。これは通常www-dataです。ほとんどの場合、このユーザーには、ユーザーのホームディレクトリにファイルを作成する権限がありません。

したがって、ApacheユーザーにDesktop Directorへの書き込みアクセスを許可する必要があります。

注:これは悪い考えですしかし、いくつかの方法で行うことができます。

1.Apacheユーザーをユーザーグループに追加します。

2.デスクトップディレクトリのアクセス許可を変更して、誰でも書き込みできるようにします(おそらく最悪の考えです)。

3. www-dataグループに自分を追加し、デスクトップフォルダーのグループ所有者をwww-dataに変更します。

これらの手法は、ホームディレクトリを他のユーザーに公開するため、注意してください。

無関係:なぜこれほど多くの..を使用するのですか?絶対パスを使用してください。

0
Dan

../../../../../Desktopにファイルを作成する権限が必要です。

なぜなら、PHPコードはApacheユーザーprivaliageで実行されるからです。

必要な場合は、次のコマンドで確認および変更する必要があります。

ls -l ../../../../../Desktop

Sudo chmod 777 ../../../../../Desktop

または

Sudo chown xxx ../../../../../Desktop

xxxはApacheユーザー名です。

0
xiaodongjie