ディレクトリの内容と同じように、ディレクトリを777にchmodしました。それでも、「許可が拒否されました」というエラーが表示されます。ファイルのアクセス許可に関係なく、Apache がグループ/所有者でない場合、PHP はこのエラーをスローしますか? 失敗した呼び出しは次のとおりです。
rename('/correct/path/to/dir/1', '/correct/path/to/dir/2');
ディレクトリの内容と同じように、ディレクトリを777にchmodしました。それでも、「許可が拒否されました」というエラーが表示されます。ファイルのアクセス許可に関係なく、Apache がグループ/所有者でない場合、PHP はこのエラーをスローしますか? 失敗した呼び出しは次のとおりです。
rename('/correct/path/to/dir/1', '/correct/path/to/dir/2');
上位レベルのディレクトリを編集しているため、PHP ユーザーはそのディレクトリへの書き込みアクセス権を持っている必要があります。
明確にするために、php は実際の所有権を持つディレクトリの名前のみを変更できます。
-rwxrwxrwx user user temp/
-rwxr-xr-x apache apache temp2/
-rw-r--r-- user user script.php
script.php がこれら 2 つのディレクトリの名前を変更しようとしているとします。
// this operation fails as PHP (running as apache) does not own "temp",
// despite having write permissions
rename('temp', 'temp.bak');
// this operation is successful as PHP owns "temp2"
rename('temp2, 'temp.bak');
これはおそらく、apache が親ディレクトリの所有者ではないためです。ファイルの名前を変更 (または移動) することは、基本的に新しいファイルを作成することと同じです。
このような状況に役立つもう 1 つの方法は、実際にアクセス許可を下げてみることです。アクセス許可の設定が高すぎるために、apache がアプリケーションのアクセス許可を拒否する場合を見てきました。私の推測では、これは適切なセキュリティ プラクティスを促進するためのものです。
次のスクリプトを実行してみてください。
print_r(posix_getpwuid(getmyuid()));
print_r(pathinfo($YOUR_PATH));
そして、それが何を返すかを見てください。