来自子文件夹的权限被拒绝
Permission denied from a subfolder
上下文
- PHP 5.6
- IIS
- Windows 11
问题
我正在尝试在特定文件夹中写入文件,但它给了我 permission denied
。
所以,我验证了权限,一切似乎都很好。因为这是在开发环境中,所以我决定将权限更改为“Every one can do anything”到我所有文件写入的“root”文件夹。我试图替换下面的所有权限。我试图删除继承的权限。什么都没做。
然后我尝试在“根”文件夹中写入一个文件。它 worked.On 子文件夹,它工作。在子子文件夹上。有效。在子文件夹链中有一点不起作用,但在真正的子文件夹之前。
这是崩溃时的路径层次结构。
$f = new \wee\common\IO\File();
$f->write("DRIVE:/BASE_PATH/files/-/00.jpg", "hello"); // WORKS
$f->write("DRIVE:/BASE_PATH/files/-/mod/00.jpg", "hello"); // WORKS
$f->write("DRIVE:/BASE_PATH/files/-/mod/com.ci.company/00.jpg", "hello"); // WORKS
$pathLength = strlen("DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/00.jpg"); // Real path length is 85
$f->write("DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/00.jpg", "hello"); // FAILS
$f->write("DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/WorkersManager/00.jpg", "hello");
$f->write("DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/WorkersManager/workers/00.jpg", "hello");
class \wee\common\IO\File
是我的作品,但在很多其他地方也有作品。
我收到的确切错误消息是:
fopen(DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/00.jpg): failed to open stream: Permission denied
为了 100% 清楚:“根”文件夹是 DRIVE:/BASE_PATH/files/
编辑#1
下面是File
class的write
方法的实现。
public function write($fileName, $data, $lock = false) {
$this->_write($fileName, $data, $lock);
}
private function _write($fileName, $data, $lock = false, $openMode = 'w') {
if ($data === null)
$data = "";
$fh = fopen($fileName, $openMode) or die("can't open file"); // FAILS HERE
if ($lock) {
flock($fh, LOCK_EX);
}
fwrite($fh, (is_array($data) ? join("\n", $data) : $data));
if ($lock) {
fflush($fh);
flock($fh, LOCK_UN);
}
fclose($fh);
}
问题来自 PHP 5.6.26。使用 PHP 5.6.40 修复了它。
我重置为原来的权限,一切正常!
上下文
- PHP 5.6
- IIS
- Windows 11
问题
我正在尝试在特定文件夹中写入文件,但它给了我 permission denied
。
所以,我验证了权限,一切似乎都很好。因为这是在开发环境中,所以我决定将权限更改为“Every one can do anything”到我所有文件写入的“root”文件夹。我试图替换下面的所有权限。我试图删除继承的权限。什么都没做。
然后我尝试在“根”文件夹中写入一个文件。它 worked.On 子文件夹,它工作。在子子文件夹上。有效。在子文件夹链中有一点不起作用,但在真正的子文件夹之前。
这是崩溃时的路径层次结构。
$f = new \wee\common\IO\File();
$f->write("DRIVE:/BASE_PATH/files/-/00.jpg", "hello"); // WORKS
$f->write("DRIVE:/BASE_PATH/files/-/mod/00.jpg", "hello"); // WORKS
$f->write("DRIVE:/BASE_PATH/files/-/mod/com.ci.company/00.jpg", "hello"); // WORKS
$pathLength = strlen("DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/00.jpg"); // Real path length is 85
$f->write("DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/00.jpg", "hello"); // FAILS
$f->write("DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/WorkersManager/00.jpg", "hello");
$f->write("DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/WorkersManager/workers/00.jpg", "hello");
class \wee\common\IO\File
是我的作品,但在很多其他地方也有作品。
我收到的确切错误消息是:
fopen(DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/00.jpg): failed to open stream: Permission denied
为了 100% 清楚:“根”文件夹是 DRIVE:/BASE_PATH/files/
编辑#1
下面是File
class的write
方法的实现。
public function write($fileName, $data, $lock = false) {
$this->_write($fileName, $data, $lock);
}
private function _write($fileName, $data, $lock = false, $openMode = 'w') {
if ($data === null)
$data = "";
$fh = fopen($fileName, $openMode) or die("can't open file"); // FAILS HERE
if ($lock) {
flock($fh, LOCK_EX);
}
fwrite($fh, (is_array($data) ? join("\n", $data) : $data));
if ($lock) {
fflush($fh);
flock($fh, LOCK_UN);
}
fclose($fh);
}
问题来自 PHP 5.6.26。使用 PHP 5.6.40 修复了它。
我重置为原来的权限,一切正常!