Вопрос по php – fopen Отказано в доступе к файлу с 777 разрешениями

4

Поскольку заголовок этого поста не требует пояснений, я просто перейду к коду:

echo sprintf('%o', fileperms('test.txt'))."<br/>";

fopen("test.txt", "w");

И с этим я получаю:

100777
fopen(test.txt): failed to open stream: Permission denied

Есть идеи ?

Изменить: Проблема решена: на сервере были списки контроля доступа, которые были настроены неправильно.

Спасибо !

Может быть, SElinux блокирует вас? Пытатьсяls -Z в файле. kichik

Ваш Ответ

4   ответа
0

папка была 777, но fopen не работал. Fopen сказал разрешение отрицать. Убедитесь, что в вашем сценарии есть "хороший" разрешения. может быть, это поможет вам

echo $dst, file_exists($dst) ? ' exists' : ' does not exist', "\n";
echo $dst, is_readable($dst) ? ' is readable' : ' is NOT readable', "\n";
echo $dst, is_writable($dst) ? ' is writable' : ' is NOT writable', "\n";
$fh = fopen($dst, 'w');
if ( !$fh ) {
    echo ' last error: ';
    var_dump(error_get_last());
}
0

что проблема у вас есть проблема с владением файлами ... вы можете использовать это, чтобы выяснить проблему

error_reporting(E_ALL);
ini_set('display_errors','On');

$file = "a.jpg";

echo sprintf ( '%o', fileperms ( $file ) ), PHP_EOL;
echo posix_getpwuid ( fileowner ( $file ) ), PHP_EOL; // Get Owner
echo posix_getpwuid ( posix_getuid () ), PHP_EOL; // Get User

if (is_file ( $file )) {
    echo "is_file", PHP_EOL;
    ;
}

if (is_readable ( $file )) {
    echo "is_readable", PHP_EOL;
    ;
}

if (is_writable ( $file )) {
    echo "is_readable", PHP_EOL;
}

fopen ( $file, "w" );
Error: User Rate Limit Exceeded personne3000
Error: User Rate Limit Exceededstackoverflow.com/questions/10414208/…
Error: User Rate Limit Exceededchown php.net/manual/en/function.chown.phpError: User Rate Limit Exceededchmod php.net/manual/en/function.chmod.php
Error: User Rate Limit Exceeded personne3000
Error: User Rate Limit Exceeded personne3000
4

возможно, что у вас есть права на запись / чтение для файла, но не для папки. Попробуйте это в публичном корне вашего сайта и посмотрите, сможете ли вы прочитать или написать файл.

Для безопасного режима (http://php.net/manual/en/function.fopen.php), php doc 's говорят следующее:

Note: When safe mode is enabled, PHP checks whether the directory in which the script is operating has the same UID (owner) as the script that is being executed.

Последнее, вы также должны быть уверены, что php имеет доступ к папке, в которую вы пытаетесь написать.

Error: User Rate Limit Exceeded personne3000
0

и, к сожалению, сообщение об ошибке не дало подсказки о реальной причине. Я должен был дать 777 для файла класса, включенного в файл, который дал сообщение об ошибке. В сообщении об ошибке говорится только о php-файле, который вызывает этот класс, который уже имел 777.

Итак, проверьте файл, упомянутый в сообщении об ошибке (скажем, index.php), а затем проверьте, какие классы создаются в этом файле (class-file.php, class-writer.php и т. Д.). Затем проверьте права доступа к этим файлам (class-file.php, class-writer.php).

Как только я дал разрешения на файл класса, он работал нормально. Возможно, веб-хост изменил что-то в их конфигурации, так как все работало до нескольких дней назад.

Похожие вопросы