#php #linux #raspberry-pi #touch #ntfs
#php #linux #raspberry-pi #коснитесь #ntfs
Вопрос:
Я попытался выполнить эту команду:
php -r "touch('/mnt/my_drive/test.txt', 1600981328);"
Я получил эту ошибку:
PHP Warning: touch(): Utime failed: Operation not permitted in Command line code on line 1
Если я запускаю его с sudo
помощью, я не получаю ошибку.
/mnt/my_drive
это диск NTFS. Монтирование было создано fsab
с umask=000
помощью, поэтому я понятия не имею, почему я получаю ошибку разрешения.
Пожалуйста, не помечайте это как дубликат, потому что подобные вопросы имеют следующие ответы:
- Проверьте разрешения: это должно быть правильно из-за
umask=000
- Запустите composer / php в расширенном режиме: Я бы хотел избежать запуска веб-сервера от имени администратора
- Измените некоторые файлы библиотеки в поставщике: я получаю эту ошибку даже в командной строке, как показывает мой пример
- Не используйте ntfs: это не мой выбор
Комментарии:
1. Можете ли вы показать нам строку монтирования из fstab? Если он работает с использованием sudo, это определенно проблема с разрешениями. Если у вас есть
umask
определенный в fstab, мой первый вопрос — проверитьuid
gid
, есть ли также определенный и / или?2. Пожалуйста, добавьте некоторые подробности об используемом сценарии, например, точный дистрибутив и версию Linux, версию PHP и текущие данные монтирования со всеми параметрами / флагами? Спасибо
Ответ №1:
Это может произойти, когда пользователь PHP работает как не является владельцем файлов кэша. Проверьте эту ссылку Сбой Utime: операция не разрешена
Ответ №2:
Ваш код отлично работал на моей машине с php7.4 и ntfs, смонтированной с:
/dev/sdaX в /mnt/tmp введите fuseblk rw,relatime,user_id=0,group_id=0,allow_other,blksize=4096)
Вы уверены, что каталог, в котором вы пытаетесь это сделать, позволяет создавать файлы? Существует ли каталог?
Если вы можете создавать обычные файлы без установки параметра time, это может быть как-то связано с монтированием ntfs или fuse.
В этом случае: попробуйте запустить команду php в strace, чтобы увидеть, что на самом деле не удается, это должно помочь устранить ошибку.
РЕДАКТИРОВАТЬ: также umask не должен иметь значения в этом случае, какое значение имеют разрешения каталогов, содержащих файл.
Ответ №3:
Обновление времени изменения файла завершается сбоем, если оно не выдано владельцем. Попробуйте очистить файлы кэша и воссоздать их заново с пользователем PHP в качестве владельца.
Ответ №4:
Никогда не считается хорошим моментом для изменения времени модификации, если только нет необходимости передавать что-то другим. Это поспешно и не показывает никакой функции. Единственное, что я могу вам сказать, это то, что вы должны владеть файлом, вам может понадобиться root, просто для доступа к этим разрешениям, и что с помощью sudo вы можете делать все, что угодно. Так что у вас нет надежды на это. Я надеюсь, что это может заставить вас поверить в какой-то другой способ сбоя файловой системы для ваших клиентов.
Комментарии:
1. Это минимально воспроизводимый пример. Я не хочу вызывать touch таким образом, но библиотека это делает.
2. @IterAtor Вы читали документацию? Обычно он может указывать на какие-либо проблемы в своем собственном коде. Кроме того, если это на GitHub, вы можете быть уверены, что проблема с кодом устранена, и автор кода напрямую позаботится о ней.