|
|
|
| скажите, пожалуйста, как сделать автопостинг гостевы? т.е. с пмощью скрипта добавлять автоматом сообщения в гостевые книги. Есть файл base.dat, где в каждой строчке хнраняться адреса, гостевые однотипные...
$bd=file(base.dat);
foreach($bd as $val)
{
...
}
Как енто сделать, не подскажете... поля для заполнения стандартаные, т.е. name,mail,city,url,text | |
|
|
|
|
|
|
|
для: BAHO
(04.07.2005 в 06:00)
| | Хм... вопрос-то на грани фола, а данные как передаются методом GET или POST? | |
|
|
|
|
|
|
|
для: cheops
(04.07.2005 в 10:59)
| | POST | |
|
|
|
|
|
|
|
для: BAHO
(04.07.2005 в 11:03)
| | Можно попробовать передать данные через сокеты. Подробности по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1879 | |
|
|
|
|
|
|
|
для: cheops
(04.07.2005 в 11:17)
| | ух млин, чё то я не совсем всё понял... | |
|
|
|
|
|
|
|
для: BAHO
(04.07.2005 в 15:06)
| | Ну, тогда погоди немного в спамеры переходить :-)
Немного набери навыков %)) | |
|
|
|
|
|
|
|
для: XPraptor
(04.07.2005 в 15:46)
| | to XPraptor: ну тут не совсем спам... тут совсем другая задача...
to cheops:
я воспользовался ентим кодом:
<?
$hostname = "localhost";
$path = "http://guest.kn/guest.php";
$line = "";
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
$data="name=gjfg&mail=1@drhdr.ru&mess=jgfjg\r\n\r\n";
$headers = "POST $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".strlen($data)."\r\n\r\n";
// Отправляем HTTP-запрос серверу
fwrite($fp, $headers.$data);
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
echo $line;
?>
|
сразу возник такой вопрос: имя хоста, а вот на других сайтах енто же не так будет, вернее не обязательно такое название... ведь запросы буду отсылаться в инет на другие сайты...
у себя на компе протестил код на гостевой, появился заголовок, он меня обрадовал на некоторое время :
HTTP/1.1 200 OK Date: Mon, 04 Jul 2005 12:58:01 GMT Server: Apache/1.3.31 (Win32) PHP/4.3.10 X-Powered-By: PHP/4.3.10 Transfer-Encoding: chunked Content-Type: text/html f4a
До поры ждо времени пока я не узнал, что не добавилось нифига.... поля name, mail и mess обязательные для заполнения, но не прокатило... | |
|
|
|
|
|
|
|
для: BAHO
(04.07.2005 в 17:05)
| | Эх, че уж там, плодить так плодить спамеров :-)
С какой стати у тебя хост равен localhost?
У тебя же гостевая по адресу guest.kn это и есть хост, а патч это адрес самой страницы на хосте хоть вместе с хостом хоть без оного. | |
|
|
|
|
|
|
|
для: BAHO
(04.07.2005 в 17:05)
| | Команда POST HTTP-протокола ожидает после себя путь и параметры, т.е.
POST /guest.php HTTP/1.1\r\n
|
XPraptor, прав, если вы обращаетесь к guest.kn, то вместо localhost необходимо указать guest.kn. | |
|
|
|
|
|
|
|
для: cheops
(04.07.2005 в 20:57)
| | хе, ну с localhost всё понятно... сам вчера послн ответа на форуме нашёл свою ошибку...
попробовал, как вы сказали:
<?
$hostname = "http://guest.kn";
$line = "";
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
$data="name=".urlencode("gjfg")."&city=".urlencode("hgfhf")."&mess=".urlencode("jgfjg")."\r\n\r
\n";
$headers = "POST /guest.php HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".strlen($data)."\r\n\r\n";
// Отправляем HTTP-запрос серверу
fwrite($fp, $headers.$data);
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
}
echo $line;
?>
|
ответ:
Warning: fsockopen(): php_network_getaddresses: gethostbyname failed in z:\home\kn\test\index.php on line 4
Warning: fsockopen(): unable to connect to http://guest.kn/:80 in z:\home\kn\test\index.php on line 4
Операция успешно завершена. (0) | |
|
|
|
|
|
|
|
для: BAHO
(05.07.2005 в 07:37)
| | Прототокол http:// указывать не нужно - только хост. Сокетам всё-равно какой протокол, так как с сервером на нём будете говорить вы, а не они, в отличие допустим от функций PHP, которые необходимо передавать полный путь. Т.е. строку
<?php
$hostname = "http://guest.kn";
?>
|
следует исправить на
<?php
$hostname = "guest.kn";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(05.07.2005 в 12:14)
| | Чё то он всё равно не хочет посылать ничего, вернее опять появилось
HTTP/1.1 200 OK Date: Tue, 05 Jul 2005 10:48:09 GMT Server: Apache/1.3.31 (Win32) PHP/4.3.10 X-Powered-By: PHP/4.3.10 Transfer-Encoding: chunked Content-Type: text/html f4a
но данные вроде передались, но не добавились...
пробовал не только у себя на локальном сервере, но и в инете, не получается, не добавляет он чё-то | |
|
|
|
|
|
|
|
для: BAHO
(05.07.2005 в 14:49)
| | 200 OK говорит, что всё нормально - вы не сразу передававайте данные - сначала проверьте в обработчике всё ли дошло - для этого выведите дамп суперглобального массива $_POST
<?php
echo "<pre>";
print_r($_POST);
echo "</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(05.07.2005 в 15:07)
| | Всё.. я разобрался, совсем забыл о полях hidden... вот в ентом и было дело...
но появилась новая ошибка, вернее не ошибка, а проблема... когда в базе больше одной записи, то всё, скрипт перестаёт работать из-за превышения лимита времени (у меня 30 - енто говорит php) и всё... а дело будет происходить в инете... как можно ускорить процесс? последний параметр в функции fsockopen я уже брал, не помогло... | |
|
|
|
|
|
|
|
для: BAHO
(05.07.2005 в 17:06)
| | и ещё, если не сложно, подскажите, как проверить корректность ввода url... а то я с ентими регулярными выражениями запарился, но ничего хорошего из ентого не вышло... не хочет он мой url корректным назвать, хотя он корректен | |
|
|
|
|
|
|
|
для: BAHO
(05.07.2005 в 19:07)
| | Можно воспользоваться следующим регулярным выражением
<?php
$pattern = "#http://[-a-z0-9_.\/]+(\.(html|php|pl|cgi)[-a-z0-9_:@&?=+,.!/~*'%$])*#i";
if(!preg_match($pattern, $url)) exit("URL не корректент");
?>
|
| |
|
|
|