Я использую phpword
, генератор документов ms-word. Он создает временный файл, а затем переименовывает его в правильный формат .docx
.
Пользователь projop
владеет скриптом php и запускает его как projop
.
Существует не какой-либо httpd
потому что это вызов из приложения TCL
с помощью функции exec.
Я создал папку php temp в /home/projop/tmp
и дал 0777
плюс убедиться, что она принадлежит projop:projop
.
Должно ли это принадлежать группе root
или, возможно, группе apache
? Я на CentOS 6.5. не уверен, но я все время отказываюсь от разрешения.
PHP-скрипт Template.php
который переименовывает, также принадлежит projop
Предупреждение: rename (/home/projop/tmp/yRRXn0, лист анонса миссии - BB & T76.docx): разрешение отклонено в /var/www/html/doc-generate/wwwroot/phpword/src/PhpWord/Template.php в строке 340 Предупреждение: переименовать
Я не знаю, что случилось. Пользователь, которому принадлежит сценарий, является projop
, папка tmp находится в домашнем каталоге пользователя и принадлежит projop
.
Я не уверен, что происходит.
Разрешение папки /tmp:
[root@project-open-v40 projop]# ls -la
total 493808
drwxr-xr-x. 7 projop root 4096 Aug 6 09:40 .
drwxr-xr-x. 3 root root 4096 Jul 9 09:37 ..
drwxrwxr-x. 4 projop projop 4096 Oct 16 2012 acs-bootstrap-installer-master
-rwxr-xr-x. 1 projop projop 27527 Jul 15 10:32 gain_fns.php
-rw-r-----. 1 projop projop 2487 Jul 17 11:49 logo.gif
-rw-rw-r--. 1 projop projop 52535 Jul 23 09:57 master
-rwxr-xr-x. 1 projop projop 3039 Jul 28 14:37 notifyPM.php
-rw-r--r--. 1 projop projop 59719 Aug 5 09:35 resetInvoice.php
drwxr-xr-x. 3 apache apache 4096 Mar 12 15:34 templates
-rw-r--r--. 1 apache projop 7966720 Jul 9 09:37 templates.tar
drwxrwxrwx. 2 projop projop 4096 Aug 6 09:54 tmp
drwxr-xr-x. 6 apache apache 4096 Mar 2 02:43 vendor
-rw-r--r--. 1 apache projop 211886080 Jul 9 09:38 vendor.tar
drwxr-xr-x. 18 apache apache 4096 Jul 7 10:40 wwwroot
-rw-r--r--. 1 apache projop 285624320 Jul 9 09:38 wwwroot.tar
/tmp:
[root@project-open-v40 tmp]# ls -la
total 152
drwxrwxrwx. 2 projop projop 4096 Aug 6 09:54 .
drwxr-xr-x. 7 projop root 4096 Aug 6 09:40 ..
-rwxrwxrwx. 1 projop projop 34854 Aug 6 09:53 G0pC83
-rwxrwxrwx. 1 projop projop 34854 Aug 6 09:42 lLm9Iz
-rwxrwxrwx. 1 projop projop 34854 Aug 6 09:46 NR8CSg
-rwxrwxrwx. 1 projop projop 34854 Aug 6 09:54 yRRXn0
Глядя на предупреждение команды переименования:
Warning: rename(/home/projop/tmp/yRRXn0,Mission Announcement Sheet - BB&T76.docx): Permission denied in /var/www/html/doc-generate/wwwroot/phpword/src/PhpWord/Template.php on line 340 Warning: rename
вы пытаетесь переименовать файл без указания пути. Затем вы пытаетесь переименовать в другое место из вашего ожидаемого /home/projop/tmp/
Попробуйте предварительно найти путь к второму аргументу и повторите попытку.
используйте chmod
для изменения прав доступа к файлу, прежде чем пытаться переименовать его - изменение разрешений на 0777, как у вас есть для папки.
http://php.net/manual/en/function.chmod.php
Также используйте http://php.net/manual/en/function.fileperms.php для возврата текущих значений файла, посмотрите, есть ли там что-то необычное?
Другой альтернативой, если это не удается, является использование скрипта PHP для загрузки содержимого файла, а затем сохранения содержимого под новым именем и удаления оригинала. Это длительный процесс того, что делает переименование. Это не идеальный вариант, а вариант.
Редактировать:
Возможно, вам не удастся переименовать содержимое папки /tmp/
, так как это выделенная и указанная временная папка, поэтому вместо ее переименования попробуйте выполнить описанный выше процесс открытия файла, а затем переименуйте и сохраните его на другой более постоянный место назначения.