переименовать файл в php на файловом сервере Windows (путь unc)

В PHP я хочу переименовать (переместить/скопировать) файл на файловом сервере Windows: "\myserver\folder1\folder2\myfile.pdf" в "\myserver\folder1\folder2\OLD\myfile.pdf"

(все папки уже существуют, а файл назначения не существует)

Я пробовал это:

copy("\\\\myserver\\folder1\\folder2\\myfile.pdf", "\\\\myserver\\folder1\\folder2\\OLD\\myfile.pdf");

а также

copy("//myserver/folder1/folder2/myfile.pdf", "//myserver/folder1/folder2/OLD/myfile.pdf");

Я получаю:

[function.copy]: failed to open stream: Permission denied 

Компьютер, на котором я нахожусь/пользователь вошел в систему, имеет разрешения на переименование/перемещение/удаление/копирование в этот общий ресурс/папку.

Я предполагаю, что мне нужно как-то дать разрешения php или запустить php как мой пользователь? ИЛИ?


person Scott Szretter    schedule 02.02.2011    source источник


Ответы (2)


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

person Eric Petroelje    schedule 02.02.2011
comment
это имеет смысл, но могу ли я изменить службу apache windows для запуска от имени другого пользователя, отличного от «локальной системы» (и у этого пользователя есть разрешение), ИЛИ? - person Scott Szretter; 02.02.2011
comment
@ Скотт - да, было бы разумно запустить apache от имени другого пользователя. Вероятно, это также должна быть учетная запись домена, чтобы гарантировать, что ей может быть предоставлен доступ к ресурсам на другом сервере. - person Eric Petroelje; 02.02.2011
comment
@Scott - альтернативным решением может быть использование FTP вместо копии файла, если это возможно. - person Eric Petroelje; 02.02.2011

Не используйте Copy... вместо этого используйте move_uploaded

Это один из примеров получения изображения из формы:

$img = 'sample.jpg;
$path = '//nameofyourpcinyournetwork/sharedfolder/folderyoulike/';
$pathwithimg = $path.$img;
if (!is_dir($path)) {
  mkdir($path, 0644, TRUE); // TRUE for make it recursive
}
if (file_exists($pathwithimg)) {
 unlink($pathwithimg);
 move_uploaded_file($_FILES["file"]["tmp_name"], $pathwithimg);
 chmod($pathwithimg, 0644);
}

Измените safe_mod на Off, если он у вас включен.

П.Д. Да, я знаю, этот пост был 5 лет назад ... но никто не дал правильного ответа, и другие люди (например, я) могут найти этот вопрос.

person Newtron    schedule 19.04.2016