Сокеты: отправка файла и данных.

JIEXA

Новичок
Сокеты: отправка файла и данных.

Написали с другом функцию для отправки файлов и данных через сокеты.
Вот что получилось
PHP:
<?  
function sendFile($host, $port, $path, $filePath, $fileName, $fileField, $fields = array())  
{  
      define("CRLF", "\r\n");  
      define("DCRLF", CRLF.CRLF);  

      $boundary = uniqid('------------------');  
        
      $fieldsData = "";   
      foreach($fields as $field => $value)  
      {  
            $fieldsData .=  $boundary.CRLF;  
            $fieldsData .=  "Content-Disposition: form-data; name=\"".$field."\"".DCRLF;  
            $fieldsData .=  urlencode($value).CRLF;  
      }  
        
      $contentType = function_exists("mime_content_type") ? mime_content_type($filePath) : "application/octet-stream";  
        
      $fileHeaders = $boundary.CRLF; 
      $fileHeaders .= "Content-Disposition: form-data; name=\"".$fileField."\"; filename=\"".$fileName."\"".CRLF;   
      $fileHeaders .= "Content-Type: ".$contentType.DCRLF;  
      $fileHeadersTail = CRLF.$boundary."--".CRLF.CRLF;   
        
      $contentLength = strlen($fieldsData) + strlen($fileHeaders) + filesize($filePath) + strlen($fileHeadersTail);  
        
      $headers  = "POST $path HTTP/1.1".CRLF;  
      $headers .= "Host: ".$host.CRLF;  
      $headers .= "Connection: Close".CRLF; 
      $headers .= "Pragama: no-cache".CRLF;   
      $headers .= "Cache-Control: no-cache".CRLF;  
      $headers .= "Accept: */*".CRLF;  
      $headers .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7".CRLF;  
      $headers .= "Referer: ".$host.CRLF;   
      $headers .= "Content-type: multipart/form-data; boundary=".$boundary.CRLF;  
      $headers .= "Content-length: ".$contentLength.CRLF.CRLF;  
      $headers .= $fieldsData;  
      $headers .= $fileHeaders;  
       
      $fp = fsockopen($host, $port);   
      //$fp = fopen("output.txt", "w");           
      fputs($fp, $headers);  

      $fp2 = fopen($filePath, "rb");  
      while(!feof($fp2)) fputs($fp, fgets($fp2, 4096));  
      fclose($fp2);  
        
      fputs($fp, $fileHeadersTail);  
        
      $serverResponse = "";  
      while(!feof($fp)) $serverResponse .= fgets($fp, 4096);  
      fclose($fp);  
        
      return $serverResponse;  
}  
?>
Вызывается так:
PHP:
<? 
print sendFile("sitename.ru", 80, "/read.php", "./probe.txt", "probe.txt",   
         "filecontent", array("mirror" => "on")); 
?>
Но почему то не работает. Я для теста отправлял сокеты на свой локалхост, и почему-то массивы $_FILES и $_POST пустые... Вроде все правильно делали. Хотя... Жду ваших ответов дорогие программисты :)
 

JIEXA

Новичок
Это намек, что мы не умеем отлаживать скрипт?
Дело в том, что если бы мы не проседели полдня, пытаясь "оживить" скрипт, то я бы не писал здесь на форуме.
 

SiMM

Новичок
Это намёк на то, что неплохо бы посмотреть отправляемый на сервер запрос, и сравнить его с тем, что получается при отправке браузером. Для начала. Как-то знаете-ли наивно полагать, что кто-то будет изучать ваш код длиннее 10-15 строк.

> Дело в том, что если бы мы не проседели полдня
А вот это совершенно не имеет никакого значения, хоть неделю.
 

JIEXA

Новичок
Может вы и сторожил этого форума, но пожалуйста при ответе будьте по мягче. Грубить - не хорошо..
 

SiMM

Новичок
> Грубить - не хорошо..
И где я в этом топике нагрубил? Посыл в FAQ для вас - проявление грубости? Мне вас жаль.
 

JIEXA

Новичок
> И где я в этом топике нагрубил? Посыл в FAQ для вас -
> проявление грубости? Мне вас жаль.
нет я имел ввиду:
А вот это совершенно не имеет никакого значения, хоть неделю.
Вы просто проявляете свое НЕ уважение.

Знаете, когда нечего сказать, лучше ничего и не говорить. Я написал ещё в третьем посте, что мы пытались найти ошибку. Но не получилось, поэтому обратились за помощью на форум.
 

SiMM

Новичок
Родной, а как насчёт того, что ты проявляешь неуважение, не выполняя правил форума?

> Я написал ещё в третьем посте, что мы пытались найти ошибку.
Я не телепат, и понятия не имею, что значит фраза "пытались найти ошибку". Применительно к данному форуму она может означать всё что угодно, начиная от "поплёвывали в потолок" или "производили танцы с бубном".
Хорошо. Пытались. Как? Где результат накопанного? Где результат сравнения?
> неплохо бы посмотреть отправляемый на сервер запрос, и сравнить его с тем, что получается при отправке браузером
 

JIEXA

Новичок
Пробывали эксперементировать с переводом коретки. Кстати, заголовки сравнивали с теми заголовками, которые отправляет браузер - вроде идеинтично. Хотя может что-то и упустили. Людям свойственно ошибатся. Поймите, если мы сами не переробывали возможные варианты, то не стали бы обращатся на форум.
SiMM, ты теперь сторожил :))))
Может я и ошибся, но это написано у него под ником...
 

itprog

Cruftsman
JIEXA

ну а почему бы не показать отсылаемые заголовки? мне например лень запускать эту функцию
 

SiMM

Новичок
> Пробывали эксперементировать с переводом коретки.
И какой в этом смысл? Вот это как раз и называется "танцы с бубном", потому что вместо того, чтобы заняться отладкой вы действовали наугад. И совершенно неважно, полдня вы этим занимались, неделю, или месяц - это всё равно бы не привело ни к какому результату. И после этого вы ещё будете утверждать, что "А вот это совершенно не имеет никакого значения, хоть неделю." - грубость? Это не грубость, это наблюдение.

> вроде идеинтично
Давайте без "вроде". Идёте и занимаетесь отладкой. В частности выводите то, что отсылаете серверу, через echo, и сравниваете с тем, что получилось, когда вы подсматривали заголовки, отправляемые браузером, смотрите на различия.
hint: будет легче, если отсылаемый файл будет небольшого размера.
PS: и к PHP ваша проблема не имеет никакого отношения. Это скорее HTTP.
 

JIEXA

Новичок
Почитал эту статью, убрал все лишние из заголовков. Вот получилось, что скрипт передает вoт такие заголовки:
PHP:
POST /read.php HTTP/1.1
Host: localhost.ru
Referer: localhost.ru
Content-type: multipart/form-data; boundary=------------------4463002275803
Content-length: 1543

------------------4463002275803
Content-Disposition: form-data; name="mirror"

on
------------------4463002275803
Content-Disposition: form-data; name="filecontent"; filename="www.rar"
Content-Type: application/x-rar

тут_содержание_файла
------------------4463002275803--
Но все равно ниприходят не данные не файл
 
Сверху