05.03.2010, 20:14
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
ззапись файла через fopen по протоколу ftp
Вопрос следующий. Почему при открытии файла по протоколу ftp след образом и запись в него например 20кб, на диск сервера записывается от 1 до 5кб но никогда полная длина файла?
$ftppath = "ftp://{$conf['ftp']['user']}:{$conf['ftp']['pass']}@{$conf['ftp']['host']}{$conf['ftp']['base']}";
$ftp = fopen($ftppath."/export/$file",'wb');
$r = fputs($ftp,$content,strlen($content));
//sleep(1); об этом ниже...
fclose($ftp);
Как видно я закомментил задержку. Так вот. Если завершить скрипт записи сразу же, то запись бажит (хоть и $r = длине $content), но если, например, после записи будет задержка (например генерация документа после экспорта данных), то запись производится корректно.
Не пойму это что, жесткий тормозит на сервере и ему время надо дать на окончание операции?
П.С. ftp_* не использовал, т.к. не на всех серверах открыт этот модуль...
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
|
|
05.03.2010, 20:37
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
А если записывать не сразу, а кусками по 1024 символов?
P.S. cURL?
|
|
05.03.2010, 20:52
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от B@rmaley.e><e
|
А если записывать не сразу, а кусками по 1024 символов?
|
непробовал но это же будет намного дольше и не факт что также верно.
Сообщение от B@rmaley.e><e
|
P.S. cURL?
|
нет. простое сохранение данных на другой хост.
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
|
|
05.03.2010, 22:26
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
PeaceCoder,
попробуй fflush
кстати, впервые вижу такую запись в FTP
обычно пишут через fsockopen(код получается объемнее, но можно много плюшек сделать), либо стандартные ftp_*** ф-ции(самый простой способ, подходящий для большинства ситуаций)
Хотя, и так думаю можно, но тут приходится надеятся на "URL wrappers".
честно говоря не доверяю им с тех пор, как попытался написать smb-сканер сетки. большинство попыток просто дохло раньше таймаута, который я даже в php.ini не нашел настроек.
Кстати, стоит проверить точно ли $ftppath."/export/$file" содержит именно то, что вы думаете
Моя рекомендация: используйте ftp_connect и связанное с ним семейство ф-ций
Сообщение от B@rmaley.e><e
|
cURL?
|
ну, какбы curl-функции имеют название, начинающееся с curl_
|
|
06.03.2010, 01:05
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от Gvozd
|
кстати, впервые вижу такую запись в FTP
|
http://ua2.php.net/manual/en/function.fopen.php
Цитата:
|
If PHP has decided that filename specifies a registered protocol, and that protocol is registered as a network URL, PHP will check to make sure that allow_url_fopen is enabled. If it is switched off, PHP will emit a warning and the fopen call will fail.
|
Сообщение от Gvozd
|
либо стандартные ftp_***
|
функции ftp_*** не имеют возможности создавать файл на лету. Ед. что я видел в возможностях это работа с готовыми файлами... создавать то как их?
Сообщение от Gvozd
|
fsockopen
|
да подумываю научится работать с сокетами, но ни как руки не дойдут...
Сообщение от Gvozd
|
$ftppath."/export/$file" содержит именно то, что вы думаете
|
точно содержат. я же написал, что файл создается там где нужно, но вот пишет в него разное количество данных, если не делать задержек...
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
|
|
06.03.2010, 01:52
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от PeaceCoder
|
http://ua2.php.net/manual/en/function.fopen.php
|
ну, да
это то, что я сказал про URL-обертки
и они довольно глючны бывают, порой.
я на них не полагаюсь
PS а вы попробовали мой самый первый совет?
вы про него ничего не отписались, помог ли он вам, или же вы почему-то не можете им воспользоватся.
я думаю, это должно помочь
|
|
06.03.2010, 13:39
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от Gvozd
|
S а вы попробовали мой самый первый совет?
|
fflush ? непомогает. всегда пишет 1кб заместь 20ти.
Пробовал по 1кб записывать результата никакого. только задержка помогает...
через fsocketopen так и не понял как записывать файл. там через заголовки надо както, мароки много.
через ftp_*** работа ток с готовыми файлами... да и не всегда ftp_*** есть на всех серверах, но что бы избавится от задержек, сделал так:
$fp = tmpfile();
fputs($fp,$content,strlen($content));
rewind($fp);
$ftp = ftp_connect($conf['ftp']['host']);
ftp_login($ftp,$conf['ftp']['user'],$conf['ftp']['pass']);
ftp_fput($ftp,$conf['ftp']['base']."/export/$file",$fp,FTP_BINARY);
ftp_close($ftp);
fclose($fp);
позже надо будет продумать универсальный класс работы с файлами как локальными так и удаленными...
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
Последний раз редактировалось PeaceCoder, 06.03.2010 в 13:45.
|
|
|
|