У моей функции проблемы с созданием и копированием содержимого в новый каталог (также я не уверен, что это лучший способ сделать это, поэтому приветствуются альтернативные предложения).
У меня есть 2 сетевых диска, установленных через /etc/fstab
, например:
//128.251.108.xxx/Data/Agilent_Data /home/lv_admin/uslonsnas001 cifs cred=/etc/.na02passwd,rw,umask=0000,uid=www-data,gid=webgroup 0 0
//128.251.108.xx/c$/Agilent /home/lv_admin/uslonsapp003 cifs cred=/etc/.na02passwd,rw,umask=0000,uid=www-data,gid=webgroup 0 0
Обычно при запросе пути к файлу от uslonsapp003
mount я проверяю, существует ли структура каталогов в uslonsnas001
, и создаю рекурсивный каталог, если нет. Затем я копирую содержимое из uslonsapp003
в новое расположение структуры в uslonsnas001
. Вот мой код:
$pImagePath = "http://uslonsapp003:8080/boardtests/2011/4/29/12/30/8051/Images/E_1-c274.jpg";
//strip off the path name up to '2011' and take off the image name at the end
$startpos = strpos( $pImagePath, "/boardtests/" ) + strlen( "/boardtests/" );
$endpos = strpos( $pImagePath, "/Images/" );
$file_dir = substr( $pImagePath, $startpos, ( $endpos - $startpos ) );
$orig_dir = "/home/lv_admin/uslonsapp003/ITFSS/DataStore/BoardTest/" . $file_dir;
$new_dir = "/home/lv_admin/uslonsnas001/BoardTest/" . $file_dir;
if( !is_dir( $new_dir ) )
if( !shell_exec("mkdir -p $new_dir") ) return array( "status" => 0, "errordesc" => "failed to make dir: '" . $new_dir . "'" );
if( !shell_exec("cp -r $orig_dir $new_dir") ) return array( "status" => 0, "errordesc" => "failed to copy from: '" . $orig_dir . "' to: '" . $new_dir . "'" );
return array( "status" => 1 );
Я получил обе ошибки: «не удалось создать каталог ...» и «не удалось скопировать из ...»
Это выполняется через Apache, я предполагаю, что это проблема с правами доступа, но это только моя догадка. Пожалуйста, помогите!
Я пытался добавить sudo
в начало shell_exec (), но это все равно не работает.
UPATED1
Я понял, что mkdir не работает, потому что, когда я создал каталог /home/lv_admin/uslonsnas001
, я не изменил мод, владельца и группу в нем на тот, который будет его использовать (www-data). Выполнение следующих исправлений этой части:
$ sudo chmod 775 ~/uslonsnas001
$ sudo chown www-data ~/uslonsnas001
$ sudo chgrp webgroup ~/uslonsnas001
Но у меня все еще есть проблемы с командой копирования, теперь я говорю "Модуль 'ODBC' уже загружен"