Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.03.2010, 20:14
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 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 танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
Ответить с цитированием
  #2 (permalink)  
Старый 05.03.2010, 20:37
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

А если записывать не сразу, а кусками по 1024 символов?

P.S. cURL?
Ответить с цитированием
  #3 (permalink)  
Старый 05.03.2010, 20:52
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

Сообщение от B@rmaley.e><e
А если записывать не сразу, а кусками по 1024 символов?
непробовал но это же будет намного дольше и не факт что также верно.
Сообщение от B@rmaley.e><e
P.S. cURL?
нет. простое сохранение данных на другой хост.
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
Ответить с цитированием
  #4 (permalink)  
Старый 05.03.2010, 22:26
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 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_
Ответить с цитированием
  #5 (permalink)  
Старый 06.03.2010, 01:05
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 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 танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
Ответить с цитированием
  #6 (permalink)  
Старый 06.03.2010, 01:52
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от PeaceCoder
http://ua2.php.net/manual/en/function.fopen.php
ну, да
это то, что я сказал про URL-обертки
и они довольно глючны бывают, порой.
я на них не полагаюсь
PS а вы попробовали мой самый первый совет?
вы про него ничего не отписались, помог ли он вам, или же вы почему-то не можете им воспользоватся.
я думаю, это должно помочь
Ответить с цитированием
  #7 (permalink)  
Старый 06.03.2010, 13:39
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Данные через сокет по tcp/ip протоколу анна Элементы интерфейса 6 07.07.2009 17:00
отправка файла через обработчик события submit starrich AJAX и COMET 2 13.08.2008 22:29