Saya cuba menulis fail dalam folder tertentu tetapi ia memberi saya permission returned
.
Jadi saya mengesahkan kebenaran dan semuanya kelihatan baik. Memandangkan ini berada dalam persekitaran pembangunan, saya memutuskan untuk menukar kebenaran pada folder "root" yang menulis semua fail kepada "Semua orang boleh melakukan apa sahaja." Saya cuba menggantikan semua kebenaran di bawah. Saya cuba mengalih keluar kebenaran yang diwarisi. Tiada apa yang boleh dilakukan.
Kemudian saya cuba menulis fail dalam folder "root". Ianya berfungsi. Pada subfolder ia berfungsi. pada sub-subfolder. cekap. Terdapat satu titik dalam rantaian subfolder di mana ia tidak berfungsi, tetapi sebelum subfolder sebenar.
Ini ialah hierarki laluan pada masa ranap sistem.
$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");
Kelas weecommonIOFile
dicipta oleh saya, tetapi boleh digunakan di banyak tempat lain.
Mesej ralat tepat yang saya terima ialah:
fopen(DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/00.jpg):无法打开流:权限被拒绝
Seratus peratus jelas: folder "root" ialah DRIVE:/BASE_PATH/files/
Berikut adalah pelaksanaan kaedah File
类的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); }
Isu ini datang daripada PHP 5.6.26. Isu ini dibetulkan dengan PHP 5.6.40.
Saya menetapkan semula kepada kebenaran asal dan semuanya baik-baik saja!