Помогите пожалуйста, споткнулся наверняка на какой-то ерунде((( есть код: PHP: <?php $micro=microtime(true); $site="http://www.pfts.com/uk/moreinformation/avto/"; $open=file_get_contents($site,"r"); $date=date("d.m.y"); while($fp=fgets($open,500)) { if(strpos($fp,">Best Bid, грн. <") !==false) { preg_match('(\d+)',$fp,$p); echo "$p[0]<br>"; echo "$fp"; break; } } echo "<br>$micro"; ?> <table border=1 bordercolor=red> <tr> <td> <?=$date?> </td> <td> <?=$p[0]?> </td> <td> IFPILO </td> </tr></table> ?> по идее должен брать значение 523.0000 после в строке начинающийся с ">Best Bid, грн. <" кусок оригинала страницы: PHP: </tr> <tr> <th>Best Bid, грн. </th> <td>523.0000 </td> </tr> <tr> <th>Best Bid Day's Range </th> <td class="more_info_bg">493.0000 — 527.0001 </td> </tr> <tr> но именно число 523.0000 не вытягивает, вообще пустая переменная выводится. Помогите, в чем моя ошибка?
Обрати внимание, что вызов: PHP: $open=file_get_contents($site,"r"); заносит в переменную $open строку, в то время как вызов: PHP: $fp=fgets($open,500) ожидает в качестве первого параметра ресурс файлового потока, обычно открываемого через вызовы fopen() или fsockopen(). Вот из этой задницы и растут руки твоей проблемы.
дело в том, что этот скрипт я переделал другого, поменял только адрес сайта. старый работал. итак, не совсем понял, что мне нужно сделать?
Я не верю, что старый скрипт работал, если ты поменял только урлу... Самый простой вариант в твоём случае - убрать цикл while и вести поиск в переменной $open, т.к. она в себе будет содежать контент удалённого ресурса. То есть убери цикл и вместо $fp используй $open.
понял, спс. буду пробовать. а старый работал и работает. это 100%.я проверял раз 20, не мог понять почему там работает, а там нет(
Покажи исходник этого фрагмента на старом скрипте - чисто с профессиональной точки зрения интересно...
<?php $micro=microtime(true); $site="http://bank.gov.ua/Fin_ryn/OF_KURS/Currency/FindByDate.aspx"; $open=fopen($site,"r"); $date=date("d.m.y"); while($fp=fgets($open,300)) { if(strpos($fp,">EUR</td><td align=") !==false) { preg_match('(\d+)',$fp,$p); echo "$p[0]<br>"; echo "$fp"; break; } } echo "<br>$micro"; ?> он правда не то число ищет что надо, потому что неправильно указана позиция. но факт что ищет
Ну так ты обрати внимание, что тут файловый поток получается в результате вызова: PHP: $open=fopen($site,"r");
я вот тут что-то сообразил, посмотри пожалуйста: <?php $micro=microtime(true); $site="http://www.pfts.com/uk/moreinformation/avto/"; $open=fopen($site,"r"); $date=date("d.m.y"); if(strpos($fp,">Best Bid, грн. <") !==false) { preg_match('(\d+)',$open,$p); echo "$p[0]<br>"; echo "$open"; break; } /* echo "<br>$micro"; */ echo "$p"; echo "<br>$p[0]"; echo "<br>$p[1]"; echo "<br>$p[2]"; echo "<br>$open[0]"; echo "<br>$open[1]"; echo "<br>$open[2]"; ?> что не так? а из-за регулярки может не находить?
кстати, вывел на печать $open и вот что выводит: Resource id #2 там на сайте такой строки вообще нету
Gadik, или бросай курить траву, или прочитай маны по теме функций fopen и file_get_contents... Без понимания с твоей стороны того, что делают эти функции - мои объяснения будут бессмысленны...
та млин, либо тупо написано часто, заумными словами, явно не для начинающих. хер поймешь. если б кто объяснил
Ок. Ознакомься с описанием функций: http://ru2.php.net/manual/ru/function.fopen.php http://ru2.php.net/manual/ru/function.file-get-contents.php Скажи какая формулировка тебе не понятна?
закрепляет ресурс за потоком - что значит поток тут? тут просто переменной задется url или его содержание? содержимое файла возвращается в строке - что тут имеется ввиду? одну строчку только гребет? вот эти моменты бы понять. спс!
закрепляет ресурс за потоком - буквально означает, создаётся некоторый внутренний объект PHP (ресурс), который идентифицирует файл с которым ты работаешь. Через этот объект ты можешь осуществлять операции чтения-записи (смотря в каком режиме был открыт файл). В переменной можно задавать как имя локального файла, так и имя удалённого файла (но нужно чтобы параметр allow_url_fopen в PHP был установлен в On). содержимое файла возвращается в строке - возвращается ПОЛНОЕ содержимое файла. Возвращается весь запрошенный файл.
ок. спс. в связи с этим переделал скрипт так: <?php $micro=microtime(true); $site="http://www.pfts.com/uk/moreinformation/avto/"; $open=file_get_contents($site,"r"); $date=date("d.m.y"); if(strpos($open,">Best Bid, грн. </th><td>")) { $p = substr($open, 0, 6); echo "p00=$p[0]<br>"; echo "open0=$open"; } else {echo "NO";} echo "p=$p<br>"; echo "p0=$p[0]<br>"; echo "p1=$p[1]<br>"; echo "p2=$p[2]<br>"; // echo "open=$open<br>"; ?> только не совсем еще понял как поиск сделать. но вроде я его реализовал. только похоже на то, что искомая строка ">Best Bid, грн. </th><td>" вообще не найдена в $open. как так? если она там есть?
<?php $micro=microtime(true); $site="http://www.pfts.com/uk/moreinformation/avto/"; $open=file_get_contents($site,"r"); $date=date("d.m.y"); $stroka=">Best Bid, грн. </th> <td>"; $pos = strpos($open,$stroka); if($pos !===false) { $p = substr($open, $pos, 6); echo "p00=$p[0]<br>"; echo "open0=$open"; } else {echo "NO";} echo "p=$p<br>"; echo "p0=$p[0]<br>"; echo "p1=$p[1]<br>"; echo "p2=$p[2]<br>"; // echo "open=$open<br>"; ?> вот уже с меньшим кол-во ошибок. но они еще есть(((