Запуск wget через php

Catalyst

Новичок
Запуск wget через php

Добрый вечер.

Мне понадобилось запускать UNIX команду wget через php.
Я воспользовался функцией passthru:
PHP:
$from = "ftp://somehost.net/somefile";
$to = "/home/myhost.ru/public_html/videos/";

passthru("/usr/bin/wget $from -P $to", $output);
Если я скачиваю подобным образом графические файлы(около 1Мб) всё отлично, пытаюсь скачать что-то побольше - например видео файлы от 7Мб уже не качает.

Если я делаю эту же команду в консоли на сервере, то всё в порядке, спокойно скачивается фильм.

Надеюсь, что подскажите в чём может быть загвоздка ...
 

Catalyst

Новичок
TutanXamoN
Может я ошибаюсь, но причём тут эти параметры, если я вызываю через php команду, которая работает в фоновом режиме.
Хотя конечно может вы правы, ведь какое-то ограчение судя по всему стоит.

Просто у меня есть ещё сервер, там всё в порядке, скачивается файл любого объёма.
Настройки в php.ini обоих серверов одинаковы.
 

cDLEON

Онанист РНРСlub
Может быть добавьте в конце &
Тогда ПХП скрипт будет сразу завершаться, а закачка будет в фоне.
 

Catalyst

Новичок
По поводу скачивания заметил такую вещь, скачиваются файлы любого объёма но только с прямыми сcылками:
1. http://www.gametrailers.com/download/28457/t_crysis_vr_gt_saqhjh_h264.mov
2. или так http://djannalee.com/files/dj_anna_lee_-_club-styles(129)_17.01.2008.mp3

а например по такой ссылке файл не скачивается:http://89.248.169.18/premium/501ss0u1ppl5fm6l55ky1uprjj76ob0e/sample_3564.avi
хотя эта же ссылка через броузер или через wget с консоли скачивается на ура.


Автор оригинала: *****
ба! а где там фоновый режим?
Виноват, в первом посте не точно указал код:
PHP:
$from = "ftp://somehost.net/somefile";
$to = "/home/myhost.ru/public_html/videos/";

passthru("/usr/bin/wget $from -P $to > /dev/null &", $output);
 

Alexandre

PHPПенсионер
Может я ошибаюсь, но причём тут эти параметры, если я вызываю через php команду, которая работает в фоновом режиме.
passthru - Execute an external program and display raw output
где сказано хоть слово про фоновый режим? http://ru2.php.net/manual/en/function.passthru.php

-~{}~ 04.02.08 19:21:

Note: If you start a program using this function and want to leave it running in the background, you have to make sure that the output of that program is redirected to a file or some other output stream or else PHP will hang until the execution of the program ends.
 

Catalyst

Новичок
Автор оригинала: Alexandre
Note: If you start a program using this function and want to leave it running in the background, you have to make sure that the output of that program is redirected to a file or some other output stream or else PHP will hang until the execution of the program ends.
Примечание: если вы начинаете программу с использования этой функции и хотите оставить её работать в фоновом режиме, вам необходимо убедиться, что вывод этой программы перенаправляется в файл или в некоторый другой поток вывода, иначе PHP зависнет до тех пор, пока не закончится выполнение этой программы.
Что я и делаю, перенаправляю вывод вызываемой программы в другой поток, а именно /dev/null


Проблема явно не в этом, т.к. как я писал выше, файлы скачиваются любых объёмов, по крайней мере до 200Мб. Не скачиваются файлы пока с одного конкретного хоста и не скачиваются именно через php вызов wget.

Добавил debug и логирование, давно так нужно было сделать, вот что показывает последний кусок лога.
Код:
---response end---
200 OK
hs->local_file is: sample_3576.avi (not existing)
Registered socket 38 for persistent reuse.
TEXTHTML is on.
Length: 10439432 (10.0M) [text/plain]
sample_3576.avi: Permission denied
Disabling further reuse of socket 38.
Closed fd 38

Cannot write to `sample_3576.avi' (Permission denied).
Насколько я понимаю, пишет что нет прав.
Но как такое может быть если тут же указываю другой файл с любого другого хоста, который закачивается в эту же директорию, никаких ошибок, закачка идёт до конца.

-~{}~ 07.02.08 03:57:

Проблема решилась следующим образом:

PHP:
$from = "ftp://somehost.net/somefile"; 
$to = "/home/myhost.ru/public_html/videos/"; 

passthru("cd $to && /usr/bin/wget $from > /dev/null &", $output);
Я до сих пор не понимаю почему при этой форме записи работает в 100% случаях т.к. фактически разницы нет. Ну да ладно, надеюсь кому-то поможет в будующем.
 
Сверху