загрузить файл на сетевой диск в php

php-скрипт для загрузки файла на подключенный сетевой диск не работает. Ниже приведен php-скрипт:

$newfilename = "something.wav";
$path  = 'Y:\\uploaded\\'.$newfilename;
copy($_FILES['ufile']['tmp_name'], $path);

Я также проверил разрешение для папки сетевого диска. У меня есть диск Y, сопоставленный с сетевым диском (10.4.4.32) d в загруженной папке. Он имеет разрешение на полный контроль. Я пробовал следующий путь для сетевого диска:

  • Y:\загружено\
  • \\10.4.4.32\d$\загружено\
  • move_uploaded_file($_FILES['ufile']['tmp_name'], $path);

Но он работает на локальном диске, например:

  • d:\uploaded\ Файл загружен на локальный диск, но не может быть загружен на сетевой диск. Я использовал php 5.3 и IIS 7 для приложения.

Показанные ошибки: Предупреждение: копия(\10.4.4.32\d$\uploaded\test.wav): не удалось открыть поток: Отказано в доступе в C:\inetpub\wwwroot\myapp\upload.php в строке 107

У меня есть разрешение на полный доступ в свойствах загруженной папки для КАЖДОГО пользователя. Есть ли какое-либо другое разрешение, я должен исправить.


person CodeManiac    schedule 14.06.2012    source источник
comment
Вы уже пробовали использовать move_uploaded_file()?   -  person HBv6    schedule 14.06.2012
comment
да, я только что попробовал, не работает ..   -  person CodeManiac    schedule 14.06.2012
comment
Это не работает - отличное объяснение вашей проблемы, я связываюсь с Чарльзом Ксавьером, чтобы помочь мне понять, что не работает для вас.   -  person hakre    schedule 14.06.2012
comment
Я объяснил, что он загружается на локальный диск, а не на сетевой диск, и не отображается никаких ошибок, пока файл не загружен ....   -  person CodeManiac    schedule 15.06.2012


Ответы (2)


Сначала проверьте, возвращает ли copy() значение false. Это говорит о том, что действительно есть ошибка.

Затем включите директиву track_errors в вашем php.ini, а также display_errors и error_reporting на самый высокий уровень. Когда track_errors активирован (и вы перезапустили свой веб-сервер), используйте следующую строку после копии:

var_dump($php_errormsg, error_get_last());

Это должно дать вам лучшее представление о проблеме.


Также убедитесь, что если вы используете safe_mode и open_basedir, путь, по которому вы двигаетесь, разрешен.

person cweiske    schedule 15.06.2012
comment
показывает предупреждение: move_uploaded_file(): невозможно переместить 'C:\Windows\Temp\php2693.tmp' в '\\10.4.4.32\d$\uploaded\test.wav' в C:\inetpub\wwwroot\myapp\upload .php в строке 104, строка (145) move_uploaded_file(): невозможно переместить «C:\Windows\Temp\php2693.tmp» в массив «\\10.4.4.32\d$\uploaded\test.wav» (4) { [type]=› int(2) [message]=›string(145) move_uploaded_file(): невозможно переместить «C:\Windows\Temp\php2693.tmp» в «\\10.4.4.32\d$\uploaded\ test.wav' [файл]=> строка (47) C:\inetpub\wwwroot\myapp\upload.php [строка] => int(104) } - person CodeManiac; 16.06.2012
comment
вы уверены, что имя папки d$ с $ там? - person cweiske; 16.06.2012

сетевой диск может не работать ни для apache, ни для php, поэтому используйте этот $path = "\\machine-name\share_path\";

настроить учетную запись пользователя на ОБОИХ компьютерах, например пользователя: ApacheUser

перейдите к службам и нажмите Apache и используйте только что созданную учетную запись для входа (вторая вкладка) в службу Apache исходного компьютера.

перезапустить службу апача

тогда должно работать сейчас

person chings228    schedule 15.09.2013