Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Форма сокетом

Сообщения:  [1-10]   [11-19] 

 
 автор: Loneliness   (22.06.2008 в 13:42)   письмо автору
 
   для: Trianon   (22.06.2008 в 13:21)
 

Великолепно!!! Огромное спасибо за посильную помощь в моем немного черном деле внедрения в чужой чат. Обещаю не использовать во вред.
P.S Теперь формы сокетами отправлять умею точно :)

   
 
 автор: Trianon   (22.06.2008 в 13:21)   письмо автору
 
   для: Loneliness   (22.06.2008 в 01:29)
 

$data .= "--$boundary\r\n";  
$data .= "Content-Disposition: form-data; name=\"up_photo\"; filename=\"$file_name\"\r\n"; 
$data .= "Content-Type: $content_type\r\n\r\n";
$data .= "$content_file\r\n";
$data .= "--$boundary--\r\n"; 

   
 
 автор: Loneliness   (22.06.2008 в 01:29)   письмо автору
 
   для: BinLaden   (22.06.2008 в 01:00)
 

Запрос наконец таки принял успешно, несмотря на апострофы, в принципе, но поменял на кавычки.
Вот до чего докодился:

$host = 'host.ru';  
$path = '/stena.php'; 
    

       $file_name = $_FILES['up_photo']['name'];    // the file 
       $tmp_name = $_FILES['up_photo']['tmp_name'];    // the file 
       $content_type = $_FILES['up_photo']['type'];    // the file mime type 
       $content_file = file_get_contents($tmp_name);

        srand((double)microtime()*1000000); 
       $boundary = "---------------------".substr(md5(rand(0,32000)),0,10);

$fp = fsockopen($host, 80) or die(); 


$data = ""; 

$data .= "--$boundary\r\n"; 
$data .= "Content-Disposition: form-data; name='txText'\r\n\r\n"; 
$data .= "$txText\r\n";
$data .= "--$boundary\r\n"; 
$data .= "Content-Disposition: form-data; name=\"sAvtor\" \r\n\r\n"; 
$data .= "$sAvtor\r\n";
$data .= "--$boundary\r\n"; 
$data .= "Content-Disposition: form-data; name=\"act\"\r\n\r\n"; 
$data .= "$act\r\n";    
$data .= "--$boundary\r\n"; 
$data .= "Content-Disposition: form-data; name=\"up_photo\"; filename='"$file_name\r\n"; 
$data .= "Content-Type: $content_type\r\n";
$data .= "$content_file\r\n";
$data .= "--$boundary--\r\n"; 
$content_lenght = strlen($data);
$header = "POST $path HTTP/1.0\r\n"; 
$header .= "Host: $host\r\n"; 
$header .= "Content-type: multipart/form-data, boundary=$boundary\r\n";
$header .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.01\r\n"; 
$header .= "Content-Length: $content_lenght\r\n\r\n"; 

if($fp) 

    fwrite($fp,$header.$data); 
    $line="";
   while(!feof($fp)) echo fread($fp, 1024); 

   fclose($fp); 
}

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

   
 
 автор: BinLaden   (22.06.2008 в 01:05)   письмо автору
 
   для: Loneliness   (21.06.2008 в 23:32)
 

Всё-таки лучше заменить апострофы на кавычки:

> $data .= "Content-Disposition: form-data; name=\"txText\"\r\n\r\n";

и т.д. В документации про апострофы вроде ничего не сказано. Хотя вполне возможно, что с большинством серверов работать будет и так. Но расчитывать на такое не стоит.

   
 
 автор: BinLaden   (22.06.2008 в 01:00)   письмо автору
 
   для: Loneliness   (21.06.2008 в 10:56)
 

> Warning: join() [function.join]: Invalid arguments passed in /home/loneliness/domains/..../public_html//stena.php on line 86
> В чем может причина скрываться? Какова вообще структура функции join? Как она работает?

Только на join() выдаёт ошибку? Странно. По идее, если file() не может получить содержимое файла, то тоже генерирует ошибку типа Warning.

В любом случае, замените это на $content_file = file_get_contents($tmp_name);

   
 
 автор: Loneliness   (21.06.2008 в 23:56)   письмо автору
 
   для: Trianon   (21.06.2008 в 23:32)
 

Дело прошлое, я настолько слабо представляю себе правильный HTTP запрос в данном случае, что визуально долго буду понимать, что к чему. Остается старый-добрый метод тыка. Да и пусть банят тестовый сервер, еще есть в запасе пару хостов, и окончательный вариант буду через анонимайзер делать.
С другой стороны, им и смысла меня банить нет- я им от себя буду визуальное движение в чате значительно оживлять своими пользователями, медиа базу их чата пополнять будут дополнительно также мои пользователи...
В общем, Enjoy полнейший для обеих сторон.
Единственное, что из-за моих навредивших запросов, может решат что я им бяку делаю...:(

   
 
 автор: Trianon   (21.06.2008 в 23:32)   письмо автору
 
   для: Loneliness   (21.06.2008 в 23:20)
 

Что ж... Вы, похоже, человек редких талантов :)

Доиграетесь до того, что Ваш ip просто напросто забанят.
Какой смысл использовать в качестве тестера сервер, если то же самое можно сделать собственными глазами. И ошибки так определятся куда быстрей.

   
 
 автор: Loneliness   (21.06.2008 в 23:32)   письмо автору
 
   для: Trianon   (21.06.2008 в 21:27)
 

$host = 'host.ru';  
$path = '/stena.php'; 
    

       $file_name = $_FILES['userfile']['name'];    // the file 
       $tmp_name = $_FILES['userfile']['tmp_name'];    // the file 
       $content_type = $_FILES['userfile']['type'];    // the file mime type 
       $content_file = join("", file($tmp_name));

        srand((double)microtime()*1000000); 
       $boundary = "---------------------".substr(md5(rand(0,32000)),0,10);

$fp = fsockopen($host, 80) or die(); 


$data = ""; 

$data .= "--$boundary"; 
$data .= "Content-Disposition: form-data; name='txText'\r\n\r\n"; 
$data .= "$txText\r\n";
$data .= "--$boundary\r\n"; 
$data .= "Content-Disposition: form-data; name='sAvtor'\r\n\r\n"; 
$data .= "$sAvtor\r\n";
$data .= "--$boundary\r\n"; 
$data .= "Content-Disposition: form-data; name='act'\r\n\r\n"; 
$data .= "$act\r\n";    
$data .= "--$boundary\r\n\r\n"; 
$data .= "Content-Disposition: form-data; name='up_photo'; filename="$file_name"\r\n"; 
$data .= "Content-Type: application/octet-stream\r\n";
$data .= "$content_file\r\n";
$data .= "--$boundary--\r\n\r\n"; 

$header = "POST $path HTTP/1.0\r\n"; 
$header .= "Host: $host\r\n"; 
$header .= "Content-type: multipart/form-data, boundary=$boundary\r\n";
$header .= 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.01'; 
$header .= 'Content-Length: ' . strlen($data); 


if($fp) 

    fwrite($fp,$header.$data); 
    $line="";
    while(!feof($fp)) echo fread($fp, 1024); 

    fclose($fp); 
}

Так правильно будет? И скажите, выделенная жирным часть кода $header .= 'Content-Length: ' . strlen($data); правильно построена, Не нужно ли в этот заголовок и размер файла вписывать как либо? Заранее благодарю.

   
 
 автор: Loneliness   (21.06.2008 в 23:20)   письмо автору
 
   для: Trianon   (21.06.2008 в 21:27)
 

В том и дело, что я уже до того затерроризировал своими кривыми запросами не менее кривой скрипт на удаленном сервере, что затер каким-то образом начисто все сообщения с их гребаной доски... :-( Если так продолжится, я скоро вообще сайт им в даун вынесу нечаянно своими запросами..

   
 
 автор: Trianon   (21.06.2008 в 21:27)   письмо автору
 
   для: Loneliness   (21.06.2008 в 20:44)
 

1. $boundary Всё же имеет смысл а) вычислить и б) указать в качестве separator, как сделано у Вас в исходном варианте.
2. Вместо кавычек в content-disposition ... filename= у Вас почему-то стоят пары апострофов.
3. содержимое файла Вы куда-то подевали.
$data .= "--$boundary\r\n"; 
$data .= "Content-Disposition: form-data; name='up_photo'; filename=\"$file_name\"\r\n"; 
$data .= "Content-Type: application/octet-stream \r\n\r\n";
$data .= "$content_file\r\n"; 
$data .= "--$boundary--\r\n\r\n"; 

В исходном варианте оно у Вас читалось конструкцией $content_file = join("", file($tmp_name));
4. Между полями sAvtor и up_photo затесалась какая-то пустая секция.


Общий совет. Чем терроризировать через fsockopen чужой сервер кривыми запросами, лучше сперва выводите весь запрос в файл. Или хотя бы на экран. Когда отладите формирование запроса - вернете fsockopen.
Как выглядят HTTP-запросы, можно поглядеть через httpheaders-плагины к браузеру - если лениво изучать документацию.

   

Сообщения:  [1-10]   [11-19] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования