|
|
|
|
|
для: Trianon
(22.06.2008 в 13:21)
| | Великолепно!!! Огромное спасибо за посильную помощь в моем немного черном деле внедрения в чужой чат. Обещаю не использовать во вред.
P.S Теперь формы сокетами отправлять умею точно :) | |
|
|
|
|
|
|
|
для: 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";
|
| |
|
|
|
|
|
|
|
для: 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);
}
|
Получаю в ответ Ошибка! Неподдерживаемый тип файла Хотя та же фота напрямую из формы на удаленном сервере загружается нормально. В чем косяк у меня? | |
|
|
|
|
|
|
|
для: Loneliness
(21.06.2008 в 23:32)
| | Всё-таки лучше заменить апострофы на кавычки:
> $data .= "Content-Disposition: form-data; name=\"txText\"\r\n\r\n";
и т.д. В документации про апострофы вроде ничего не сказано. Хотя вполне возможно, что с большинством серверов работать будет и так. Но расчитывать на такое не стоит. | |
|
|
|
|
|
|
|
для: 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); | |
|
|
|
|
|
|
|
для: Trianon
(21.06.2008 в 23:32)
| | Дело прошлое, я настолько слабо представляю себе правильный HTTP запрос в данном случае, что визуально долго буду понимать, что к чему. Остается старый-добрый метод тыка. Да и пусть банят тестовый сервер, еще есть в запасе пару хостов, и окончательный вариант буду через анонимайзер делать.
С другой стороны, им и смысла меня банить нет- я им от себя буду визуальное движение в чате значительно оживлять своими пользователями, медиа базу их чата пополнять будут дополнительно также мои пользователи...
В общем, Enjoy полнейший для обеих сторон.
Единственное, что из-за моих навредивших запросов, может решат что я им бяку делаю...:( | |
|
|
|
|
|
|
|
для: Loneliness
(21.06.2008 в 23:20)
| | Что ж... Вы, похоже, человек редких талантов :)
Доиграетесь до того, что Ваш ip просто напросто забанят.
Какой смысл использовать в качестве тестера сервер, если то же самое можно сделать собственными глазами. И ошибки так определятся куда быстрей. | |
|
|
|
|
|
|
|
для: 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); правильно построена, Не нужно ли в этот заголовок и размер файла вписывать как либо? Заранее благодарю. | |
|
|
|
|
|
|
|
для: 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-плагины к браузеру - если лениво изучать документацию. | |
|
|
|
|