[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Blad94

    Blad94 New Member

    Joined:
    4 Nov 2007
    Messages:
    25
    Likes Received:
    2
    Reputations:
    0
    Спасибо большое за быстрый и самое главное правильный ответ
     
    #3201 Blad94, 29 May 2008
    Last edited: 29 May 2008
  2. Gadik

    Gadik Elder - Старейшина

    Joined:
    29 May 2006
    Messages:
    97
    Likes Received:
    19
    Reputations:
    0
    Помогите пожалуйста, споткнулся наверняка на какой-то ерунде(((
    есть код:
    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, грн.&nbsp;<") !==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, грн.&nbsp;<"

    кусок оригинала страницы:
    PHP:
    </tr>

        <
    tr>
        <
    th>Best Bidгрн.&nbsp;</th>
        <
    td>523.0000&nbsp;</td>

        </
    tr>
        <
    tr>
        <
    th>Best Bid Day's Range&nbsp;</th>
        <td class="more_info_bg">493.0000 — 527.0001&nbsp;</td>
        </tr>
        <tr>
    но именно число 523.0000 не вытягивает, вообще пустая переменная выводится.
    Помогите, в чем моя ошибка?
     
    #3202 Gadik, 29 May 2008
    Last edited by a moderator: 29 May 2008
  3. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Обрати внимание, что вызов:

    PHP:
    $open=file_get_contents($site,"r");
    заносит в переменную $open строку, в то время как вызов:
    PHP:
    $fp=fgets($open,500)
    ожидает в качестве первого параметра ресурс файлового потока, обычно открываемого через вызовы fopen() или fsockopen(). Вот из этой задницы и растут руки твоей проблемы.
     
  4. Gadik

    Gadik Elder - Старейшина

    Joined:
    29 May 2006
    Messages:
    97
    Likes Received:
    19
    Reputations:
    0
    дело в том, что этот скрипт я переделал другого, поменял только адрес сайта. старый работал.

    итак, не совсем понял, что мне нужно сделать?
     
  5. Gadik

    Gadik Elder - Старейшина

    Joined:
    29 May 2006
    Messages:
    97
    Likes Received:
    19
    Reputations:
    0
    заменить fgets на fopen?
     
  6. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Я не верю, что старый скрипт работал, если ты поменял только урлу... Самый простой вариант в твоём случае - убрать цикл while и вести поиск в переменной $open, т.к. она в себе будет содежать контент удалённого ресурса. То есть убери цикл и вместо $fp используй $open.
     
  7. Gadik

    Gadik Elder - Старейшина

    Joined:
    29 May 2006
    Messages:
    97
    Likes Received:
    19
    Reputations:
    0
    понял, спс. буду пробовать. а старый работал и работает. это 100%.я проверял раз 20, не мог понять почему там работает, а там нет(
     
  8. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Покажи исходник этого фрагмента на старом скрипте - чисто с профессиональной точки зрения интересно...
     
  9. Gadik

    Gadik Elder - Старейшина

    Joined:
    29 May 2006
    Messages:
    97
    Likes Received:
    19
    Reputations:
    0
    <?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";
    ?>


    он правда не то число ищет что надо, потому что неправильно указана позиция. но факт что ищет
     
  10. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Ну так ты обрати внимание, что тут файловый поток получается в результате вызова:

    PHP:
    $open=fopen($site,"r");
     
  11. Gadik

    Gadik Elder - Старейшина

    Joined:
    29 May 2006
    Messages:
    97
    Likes Received:
    19
    Reputations:
    0
    да-да, я то мне на другом форуме посоветовали попробовать. раньше было fopen. не работает.
     
  12. Gadik

    Gadik Elder - Старейшина

    Joined:
    29 May 2006
    Messages:
    97
    Likes Received:
    19
    Reputations:
    0
    я вот тут что-то сообразил, посмотри пожалуйста:
    <?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, грн.&nbsp;<") !==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]";

    ?>

    что не так? а из-за регулярки может не находить?
     
  13. Gadik

    Gadik Elder - Старейшина

    Joined:
    29 May 2006
    Messages:
    97
    Likes Received:
    19
    Reputations:
    0
    кстати, вывел на печать $open и вот что выводит:
    Resource id #2

    там на сайте такой строки вообще нету
     
  14. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Gadik, или бросай курить траву, или прочитай маны по теме функций fopen и file_get_contents... Без понимания с твоей стороны того, что делают эти функции - мои объяснения будут бессмысленны...
     
  15. Gadik

    Gadik Elder - Старейшина

    Joined:
    29 May 2006
    Messages:
    97
    Likes Received:
    19
    Reputations:
    0
    та млин, либо тупо написано часто, заумными словами, явно не для начинающих. хер поймешь. если б кто объяснил
     
    3 people like this.
  16. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Ок. Ознакомься с описанием функций:

    http://ru2.php.net/manual/ru/function.fopen.php
    http://ru2.php.net/manual/ru/function.file-get-contents.php

    Скажи какая формулировка тебе не понятна?
     
  17. Gadik

    Gadik Elder - Старейшина

    Joined:
    29 May 2006
    Messages:
    97
    Likes Received:
    19
    Reputations:
    0
    закрепляет ресурс за потоком - что значит поток тут? тут просто переменной задется url или его содержание?

    содержимое файла возвращается в строке - что тут имеется ввиду? одну строчку только гребет?

    вот эти моменты бы понять. спс!
     
  18. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    закрепляет ресурс за потоком - буквально означает, создаётся некоторый внутренний объект PHP (ресурс), который идентифицирует файл с которым ты работаешь. Через этот объект ты можешь осуществлять операции чтения-записи (смотря в каком режиме был открыт файл). В переменной можно задавать как имя локального файла, так и имя удалённого файла (но нужно чтобы параметр allow_url_fopen в PHP был установлен в On).

    содержимое файла возвращается в строке - возвращается ПОЛНОЕ содержимое файла. Возвращается весь запрошенный файл.
     
  19. Gadik

    Gadik Elder - Старейшина

    Joined:
    29 May 2006
    Messages:
    97
    Likes Received:
    19
    Reputations:
    0
    ок. спс.
    в связи с этим переделал скрипт так:
    <?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, грн.&nbsp;</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, грн.&nbsp;</th><td>" вообще не найдена в $open. как так? если она там есть?
     
  20. Gadik

    Gadik Elder - Старейшина

    Joined:
    29 May 2006
    Messages:
    97
    Likes Received:
    19
    Reputations:
    0
    <?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, грн.&nbsp;</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>";

    ?>

    вот уже с меньшим кол-во ошибок. но они еще есть(((
     
Thread Status:
Not open for further replies.