|
Автор |
Сообщение |
yanack2
Зарегистрирован: 28.04.2008 Сообщения: 7
|
|
|
|
Всем привет. У меня возикла проблема при отправки фала методом 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 Откуда: Кировоград, Украина
|
|
|
|
А на сервере разрешена ли закачка файлов? Или может быть есть ограничение на размер загружаемого файла.
Код правильный. Я делал так же. Если нужно могу выложить свой код. |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
yanack2
Зарегистрирован: 28.04.2008 Сообщения: 7
|
|
|
|
Насчет закачки - думаю что да. Ведь через браузер можно. Ограничения как у всех, 8 - 10 M, да и отправлял то файлы не большие. Я вот тут подумал может быть нужно закачивать файл по кусочкам, вместо функции fwrite() использовать fputs(). Но что тоже не получается. Закачка обрывается на половине файла. |
|
Вернуться к началу |
|
|
yanack2
Зарегистрирован: 28.04.2008 Сообщения: 7
|
|
|
|
Если можно, выложите ваш код. Посмотрим может он будет работать. |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Вечером доберусь к нему и выложу. Сейчас просто нет под рукой параметров доступа к ФТП.
Пока советую прочитать это хотя судя по имени переменной zapros, это вы уже читали
http://www.spravkaweb.ru/php/sovet/putfile |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
yanack2
Зарегистрирован: 28.04.2008 Сообщения: 7
|
|
|
|
Ну это я видел. |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Вечером посижу над твоим кодом. Так будто бы все правильно, но что-то видно с сервером. А зачем тебе именно POST-метод. Лучше использовать FTP. Намного надежнее и можно передавать большие файлы. |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
yanack2
Зарегистрирован: 28.04.2008 Сообщения: 7
|
|
|
|
На основе даного кода я хочу сделать скрипт автопистига. Это мне нужно для размещения информации на сайтах бесплатных обявлений. Вручную все это делать утопительно, вот я и пытаюсь сделать данный скрипт.
Так то скрипт работает, но только отсылая файл с локалки на локалку. А вот на удаленый хост нет, приходят только данные без файла. Единсвенно получается если файл закодировать функцией в base64_encode(), но тогда нужно на удаленом хосте применить обратную функцию base64_decode(), что не совсмем мне подходит. Не влияет ли на это параметр magic_quotes в настройках php? |
|
Вернуться к началу |
|
|
|
|