ззапись файла через 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_* не использовал, т.к. не на всех серверах открыт этот модуль... |
А если записывать не сразу, а кусками по 1024 символов?
P.S. cURL? |
Цитата:
Цитата:
|
PeaceCoder,
попробуй fflush кстати, впервые вижу такую запись в FTP обычно пишут через fsockopen(код получается объемнее, но можно много плюшек сделать), либо стандартные ftp_*** ф-ции(самый простой способ, подходящий для большинства ситуаций) Хотя, и так думаю можно, но тут приходится надеятся на "URL wrappers". честно говоря не доверяю им с тех пор, как попытался написать smb-сканер сетки. большинство попыток просто дохло раньше таймаута, который я даже в php.ini не нашел настроек. Кстати, стоит проверить точно ли $ftppath."/export/$file" содержит именно то, что вы думаете Моя рекомендация: используйте ftp_connect и связанное с ним семейство ф-ций Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
это то, что я сказал про URL-обертки и они довольно глючны бывают, порой. я на них не полагаюсь PS а вы попробовали мой самый первый совет? вы про него ничего не отписались, помог ли он вам, или же вы почему-то не можете им воспользоватся. я думаю, это должно помочь |
Цитата:
Пробовал по 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); позже надо будет продумать универсальный класс работы с файлами как локальными так и удаленными... |
Часовой пояс GMT +3, время: 18:08. |