Ситуация - запускаем на сервере PHP бот джаббера/icq/etc (ignore_user_abort=1 и time_limit=0) Можно ли реализовать, чтобы отправляя пост на этот скрипт бот отправлял сообщение. То есть - бот не переподключается, а забирая данные переданные из формы отправляет сообщение
Чеза тупость =))) PHP: if($_POST['message'] != '') send($_POST['message']; Вообще все данные авторизации записывай в файл, а потом их читай, тогда не будет повторного переподключения. UPD: Вообще php - язык пошаговый(Т.Е выполняется пом ере работы скрипта. Тут нельзя зациклить программу как в ассемблере, c++ и других языках).
ChaaK, Ммм, крутой крутой. Банальный пример: PHP: @set_time_limit(0); @ini_set("max_execution_time", 0); @ignore_user_abort(1); switch ($_GET['cmd']) { case 'start': $f=fsockopen('ya.ru',80); $status=stream_get_meta_data($f); while (!$status['eof']) { sleep(1); } break; case 'send': $out = "GET / HTTP/1.1\r\n"; $out .= "Host: ya.ru\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($f, $out); while (!feof($f)) { echo fgets($f, 128); } fclose($f); break; } Если запустить скрипт с параметром ?cmd=start он открывает сокетное соединение и не разорвет его. (проверить можно netstat -b) А теперь через это соединение хочется получить все таки страницу. Как реализовать? Зациклить-то можно, пример из этого поста - доказательство. Соединение с яндексом будет висеть достаточно долго, а если соединение между двумя своими серверами - то и практически вечно.
Опять вопросик, то был по переименовке а теперь по удалению... Та же беда есть файл tags.php в котором нахоядтся ссылки вида Написал вот скрипт удаления ссылки по её имени , но использовал функцию strpos, и теперь если вводится вместо точного имени ссылки к примеру буква "н" то удаляются все ссылки имеющие букву н, какую другую функцию помжно использовать для нахождения совпадения в строке... PHP: <?php if (isset($_POST['butdel'])) { $filename=trim($_POST['istagdel']); $filetags=file('tags.php'); foreach ($filetags as $tag) { $pos = strpos($tag, $filename); if($pos===FALSE) $newfilename[]=$tag; } $nameforwr=implode("",$newfilename); $goodtag = fopen("tags.php", "w"); fwrite($goodtag, $nameforwr); fclose($goodtag); echo "<meta http-equiv=Refresh content='0';>"; } ?>
Zircool, попробуй так PHP: if (isset($_POST['butdel'])) { $filename=trim($_POST['istagdel']); $filetags=preg_replace('#<a href="[^"]*?'.preg_quote($filename,'#').'[^"]*">[^\n]*\n#','',file_get_contents('tags.php')); $goodtag = fopen("tags.php", "w"); fwrite($goodtag, $filetags); fclose($goodtag); echo "<meta http-equiv=Refresh content='0';>"; }
Профессиональное РНР программирование, 2-е издание. Ссылки на данную книгу есть в этой: http://forum.antichat.ru/thread8721.html теме в первом посте. А вообще почти в каждой книге есть что-то про данный вопрос.
Gifts, нет не работает,но спасибо за идею, я сделал немножко по ругому и заработало... если кому интересно PHP: <? if (isset($_POST['butdel'])) { $filename=trim($_POST['istagdel']); $filetags=file('tags.php'); $filetags=preg_replace('#<a href=\"(.*?)\">'. $filename.'</a>,#is',null,$filetags); foreach($filetags as $filetag ) { if(strlen($filetag)>8) $files[]=$filetag;// это что бы пустые строки не записывались } $files=implode("",$files); $goodtag = fopen("tags.php", "w"); fwrite($goodtag, $files); fclose($goodtag); ?>
Не могу понять что за ошибка такая, ищу строку с помощью регулярки в массиве, но выводится ошибка код такой PHP: $filename=trim($_POST['istagdel']); $filetags=file('tags.php'); preg_match('#<a href=\"(.*?)\">'.$filename.'</a>,#is', $filetags,$res); echo $res[1];
$filetags должен быть стрингом, а у тебя массив .. там же написано ! англиским по белому ! ================== если я правильно понял что тебе нужно, то вместо ф-ии file используй file_get_contents
Zircool, это значит, функция preg_match() не может понять, какого хрена переменная $filetags - не текст.
Можно использовать функцию preg_grep() она будет работать с массивом и вернет массив. Вот пример PHP: <? $file_array = file ("fil.txt"); //читаю весь файл в массив $fl_array = preg_grep("/^(\d+)\b/", $file_array);//Ищем только строки из цыфр print_r ($fl_array); ?> файл fil.txt Code: asdfasdf 0000asdfasdf 11111111 adfasd 2222222 fshdfhdf afga3333sgdfg 444444 asdfasd55555 6666 Результат работы Array ( [2] => 11111111 [4] => 2222222 [7] => 444444 [9] => 6666 )
Можно использовать и preg_grep() я написал несного по другому т.к. лублю preg_match А как выцыпить из ссылки вида её url. PHP: $filename=trim($_POST['istagdel']); $filetags=file('tags.php'); settype($filetags,'string'); preg_match('/\<a href=\"(.*?)\"\>'.$filename.'\<\/a\>,/is',$filetags,$res); echo $res[1]; этот код не работает.. регулярка неправильная ?
Как ты массив в строку переводишь О.о? допиши после settype($filetags,'string'); строку echo $filetags; Что видишь?
PHP: preg_match('#<a href="(.+)">'.$filename.'<\/a>#',$filetags,$res); $result = $res[0]; и сделай вместо file , file_get_contents ..
Сделал используя preg_match и файл открывал file_get_contents.. Только Вот сталкнулся вот с такой проблей. Имя ссылки может быть и с симвлами (,),{,}, но в таком случае проблема с регуляркой preg_match, Т.к. определяет эти символы как спец... PHP: preg_match('#<a href="(.+)">'.$filename.'<\/a>,#', file_get_contents('tags.php'),$res); Как можно обойти эту ошибку?