spamoney, проблема в file_get_contents, она посылает кривой запрос... Скорее всего не посылает заголовок Host. Лучше тяни через сокеты...
spamoney Ошибка в том, что этот скрипт пытается получить страницу, а получает ошибку 403 (доступ запрещён), это чаще всего бывает из-за robots.txt (http://anekdotov.net/robots.txt) он блочит если вы заходите без браузера как видно. Поэтому здесь вряд ли получится сделать без сокетов. Чушь. Так можно, но здесь нужны сокеты.
я имел ввиду в конкретном этом случае, что еще сказать челу который про ошибку протокола хттп "403 доступ запрещен" не знает? (ну или невидет...)
скрипт добавления в mysql базу <?php $login = $_POST['login']; $email = $_POST['email']; $pass = $_POST['pass']; $link = mysql_connect("localhost", "root", "*****") or die("Could not connect: " . mysql_error()); mysql_select_db("nova"); $query = DBQuery("SELECT * FROM admin WHERE email = '$email'"); if (mysql_num_rows($query)) die("Такой пользователь уже существует"); DBQuery("insert into admin (username, passwd, email) values('$login','$pass','$email')"); mysql_close($link); ?> php ругается на выделеную строку а вот почему незнаю =(
в php нет функции DBQuery(), есть mysql_query(), а DBQuery() ты скорее всего взял из какого-нибудь движка, где она и была определена.
вобщем если DBQuery() у тебя определена, то пользуй так : Code: $query = DBQuery("SELECT * FROM admin WHERE email = '".$email."'"); аналогично и с mysql_query() ЗЫ это же у тебя все равно не конечный вариант скрипта, да? (надеюсь)
Всем спасибо, что сказали про сокеты, а то я в php как то не очень по этому сам бы не догнал, сделал через сокеты, вроде получилось, правда там наверное много лишннего кода, т.к фук-цию function httpSocketConnection нашел в полезных скриптах: PHP: <?php function httpSocketConnection($host, $method, $path, $data) { $method = strtoupper($method); if ($method == "GET") { $path.= '?'.$data; } $filePointer = @fsockopen($host, 80, $errorNumber, $errorString); if (!$filePointer) { exit('Failed opening http socket connection: '.$errorString.' ('.$errorNumber.')<br/>\n'); return false; } $requestHeader = $method." ".$path." HTTP/1.1\r\n"; $requestHeader.= "Host: ".$host."\r\n"; $requestHeader.= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0\r\n"; $requestHeader.= "Content-Type: application/x-www-form-urlencoded\r\n"; if ($method == "POST") { $requestHeader.= "Content-Length: ".strlen($data)."\r\n"; } $requestHeader.= "Connection: close\r\n\r\n"; if ($method == "POST") { $requestHeader.= $data; } fwrite($filePointer, $requestHeader); $responseHeader = ''; $responseContent = ''; do { $responseHeader.= fread($filePointer, 1); } while (!preg_match('/\\r\\n\\r\\n$/', $responseHeader)); if (!strstr($responseHeader, "Transfer-Encoding: chunked")) { while (!feof($filePointer)) { $responseContent.= fgets($filePointer, 128); } } else { while ($chunk_length = hexdec(fgets($filePointer))) { $responseContentChunk = ''; //logEventToTextFile('debug', $chunk_length); $read_length = 0; while ($read_length < $chunk_length) { $responseContentChunk .= fread($filePointer, $chunk_length - $read_length); $read_length = strlen($responseContentChunk); } $responseContent.= $responseContentChunk; fgets($filePointer); } } //logEventToTextFile('debug', $responseContent); return chop($responseContent); } $bb=0; for($f=0;$f<3;$f++){ $data=""; $host = "anekdotov.net"; $path = "http://anekdotov.net/vovochka/index-page-$f.html"; $method = "GET"; $a=httpSocketConnection($host, $method, $path, $data); $file = preg_match_all("#<input type=hidden name=story value='(.*?)<INPUT type=image src=#si",$a,$frazes); for($i=0;$i<$file;$i++){ echo "<hr>".$frazes[1][$i]."\r\n<hr>"; } $bb++; } $vsego=$bb*$file; echo "Анекдотов на странице: <font color=red>$file</font><br>"; echo "Всего Анекдотов: <font color=green>$vsego</font>"; ?>
между проверкой на совпадение в базе и добавлением в базу надо чтото ещё написать? просто если даже находит совпадение оно всё равно дальше лезет добавлять в базу и пишит успешно зарегистрирован =) чтото не пойму в чём ошибка
Обратите внимание! Помогите пожалуйста! Вот хочу сделать так, чтобы на моем сайте не флудили, не спамили не нужной фигней А именно: Вот когда пользователь добавляет комментарий, то ту переменную, допустим строка комментария - $text, обыскивали. Я это реализовал через strstr() . PHP: $www=strstr($text, "http://"); if ($www=='http://'){ echo " Реклама запрещена!"; exit;} Но проблема заключается в том, что будут же вводить не "http://", а там "http://mysite.ru" и это уже обходит скрипт, как мне это подредактировать под все случаи?Как можно сделать так что, если в строке $text php-сценарий находит фрагмент "http://", то независимо от того что идет дальше или шло раньше делает то-то? P.S. если есть более рациональный способ анти-спама, то сообщите пожалуйста. Заранее спасибо!
как уже сказал Dr.Check юзай $www=str_replace("http://","",$text); например переменные сам поменяешь, ну и на что заменять тоже
Спасибо всем за помощь, но я решил сделать через preg_match() ИМХО так удобнее на мой взгляд. Еще вопрос в связи с этим... Вот я решил все слова забить в массив, но сценарий почему-то неправильно обрабатывается, пишет ошибку - preg_match() expects parameter 1 to be string Пробывал я сам решить проблему, но не понял... :-D PHP: $_words=array('http://', '.ru', '.com', '.mobi', '.info', '.org'); if (preg_match($_words, $text)){ // делаем то-то :) exit;} Подскажите, что тут не правильно) надо значения из массива как-то по-другому выводить что ли?Заранее спасибо.
preg_match($_words[n], $text) где n номер елемента массива. Возможно тебе нужен цикл. Как то так for ($n=1, $n>count($_words), $n++) if preg_match($_words[n], $text)...... Нужно все это только по одной причине у preg_match первым параметром идет строка, а ты ставишь массив.
Можно и без цикла, почитай про оператор альтернативы в регулярных выражениях. Должно быть примерно так $_words='^http://|\.ru$|\.com$|\.mobi$|\.info$|\.org$' if (preg_match($_words, $text))....