Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Отправка файла через сокет методом POST

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP
 
Автор Сообщение
yanack2




Зарегистрирован: 28.04.2008
Сообщения: 7

СообщениеДобавлено: Пн Апр 28, 2008 11:43 am    Заголовок сообщения: Отправка файла через сокет методом POST
Ответить с цитатой

Всем привет. У меня возикла проблема при отправки фала методом POST посредсвом PHP без использовании формы. Вот код скрипта:

Код:


<?php

$hostname = "";
$port = 80;
$path = "";

$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
if(!$fp) echo "$errstr ($errno)<br />\n";
else

   $pathfile = "C:/server/www/photo.jpg";
   $fp2 = fopen($pathfile,"rb");   
   $file = fread($fp2, filesize($pathfile));

   fclose($fp2);

   $filesize = filesize($pathfile);
   $boundary = "-----------------------------".substr(md5(rand(0,32000)),0,10);
   $dataend = "--".$boundary."--\r\n";

   $fields = "--".$boundary."\r\n";
   $fields .= "Content-Disposition: form-data; name=\"action\"\r\n\r\npost\r\n";
   $fields .= "--".$boundary."\r\n";
   $fields .= "Content-Disposition: form-data; name=\"id_client\"\r\n\r\n46\r\n";
   $fields .= "--".$boundary."\r\n";
   $fields .= "Content-Disposition: form-data; name=\"add\"\r\n\r\nЗагрузить фото\r\n";
   $fields .= $dataend;

   $data = "--".$boundary."\r\n";
   $data .= "Content-Disposition: form-data; name=\"File_0\"; filename=\"C:/server/www/photo.jpg\"\r\n";
   $data .= "Content-Type: image/pjpeg\r\n\r\n";
   $contentLength = strlen($data);
   $data .= "$file\r\n";
   $data .= $fields;

   $contentLength .= $filesize + strlen($fields);

   $headers = "POST $path HTTP/1.1\r\n";
   $headers .= "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-icq, */*\r\n";
   $headers .= "Referer: http://localhost/photo/addphoto.php\r\n";
   $headers .= "Accept-Language: ru\r\n";
   $headers .= "Content-Type: multipart/form-data; boundary=".$boundary."\r\n";
   $headers .= "Accept-Encoding: gzip, deflate\r\n";
   $headers .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n";
   $headers .= "Host: $hostname\r\n";
   $headers .= "Content-Length: $contentLength\r\n";
   $headers .= "Connection: Keep-Alive\r\n";
   $headers .= "Cache-Control: no-cache\r\n";
   $headers .= "Cookie: PHPSESSID=56d1a3e61979fcc9ca900af5bdeb3888; login=login; id_session=37c76d7e12f98bc3a2e3bdcca9fc5787\r\n";
   $headers .= "Authorization: Basic YWRtaW46MzBh5TE5ODF5\r\n\r\n";
   

   fwrite($fp, $headers.$data);

}

fclose($fp);

?>



При отправки файла со своего компьютера к себе на локал хост - все работает нормально. Но отправить файл со свого компа к себе на сайт не получается. Пробовал даже с помощью сниффера проанализировать заголовки пакетов - все индетично. Где может быть тут ошибка и что я сделал не так?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Вт Апр 29, 2008 4:07 am    Заголовок сообщения:
Ответить с цитатой

А на сервере разрешена ли закачка файлов? Или может быть есть ограничение на размер загружаемого файла.

Код правильный. Я делал так же. Если нужно могу выложить свой код.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
yanack2




Зарегистрирован: 28.04.2008
Сообщения: 7

СообщениеДобавлено: Вт Апр 29, 2008 6:55 am    Заголовок сообщения:
Ответить с цитатой

Насчет закачки - думаю что да. Ведь через браузер можно. Ограничения как у всех, 8 - 10 M, да и отправлял то файлы не большие. Я вот тут подумал может быть нужно закачивать файл по кусочкам, вместо функции fwrite() использовать fputs(). Но что тоже не получается. Закачка обрывается на половине файла.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
yanack2




Зарегистрирован: 28.04.2008
Сообщения: 7

СообщениеДобавлено: Вт Апр 29, 2008 6:58 am    Заголовок сообщения:
Ответить с цитатой

Если можно, выложите ваш код. Посмотрим может он будет работать.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Вт Апр 29, 2008 10:14 am    Заголовок сообщения:
Ответить с цитатой

Вечером доберусь к нему и выложу. Сейчас просто нет под рукой параметров доступа к ФТП.

Пока советую прочитать это хотя судя по имени переменной zapros, это вы уже читали

http://www.spravkaweb.ru/php/sovet/putfile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
yanack2




Зарегистрирован: 28.04.2008
Сообщения: 7

СообщениеДобавлено: Ср Апр 30, 2008 9:02 am    Заголовок сообщения:
Ответить с цитатой

Ну это я видел.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Ср Апр 30, 2008 10:15 am    Заголовок сообщения:
Ответить с цитатой

Вечером посижу над твоим кодом. Так будто бы все правильно, но что-то видно с сервером. А зачем тебе именно POST-метод. Лучше использовать FTP. Намного надежнее и можно передавать большие файлы.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
yanack2




Зарегистрирован: 28.04.2008
Сообщения: 7

СообщениеДобавлено: Ср Апр 30, 2008 11:09 am    Заголовок сообщения:
Ответить с цитатой

На основе даного кода я хочу сделать скрипт автопистига. Это мне нужно для размещения информации на сайтах бесплатных обявлений. Вручную все это делать утопительно, вот я и пытаюсь сделать данный скрипт.
Так то скрипт работает, но только отсылая файл с локалки на локалку. А вот на удаленый хост нет, приходят только данные без файла. Единсвенно получается если файл закодировать функцией в base64_encode(), но тогда нужно на удаленом хосте применить обратную функцию base64_decode(), что не совсмем мне подходит. Не влияет ли на это параметр magic_quotes в настройках php?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис