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

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

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

    Cowboyl0l New Member

    Joined:
    19 Nov 2011
    Messages:
    31
    Likes Received:
    1
    Reputations:
    0
    здравствуйте, подскажите пожалуйста.
    есть авторизация.
    https://supply.elfmoney.ru/login/?next=/
    с csrfmiddlewaretoken, и ssl. подскажите что не так делаю.
    1 шаг - парсю токен, 2ой пытаюсь отправить данные для авторизации, на что получаю ответ
    Code:
    Ошибка curl: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failedhuy

    PHP:
    <?
    $a getSslPage("https://supply.elfmoney.ru/login/");
    $pos strpos($a,"csrfmiddlewaretoken");
    $a substr($a,$pos+28);
    $pos strpos($a,"' />");
    $token substr($a,0,$pos);
    echo 
    $token;

    $login "login";
    $password "pass";
    $user_agent 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0';
    $url "https://supply.elfmoney.ru/login/";
           
    $ch curl_init();
     
    curl_setopt($chCURLOPT_POSTtrue);
    curl_setopt($chCURLOPT_USERAGENT$user_agent);
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_COOKIEFILEdirname(__FILE__) . 'cookie.txt');
    curl_setopt($chCURLOPT_COOKIEJARdirname(__FILE__) . 'cookie.txt');
    curl_setopt($chCURLOPT_HEADERtrue);
    curl_setopt($chCURLOPT_TIMEOUT10);
    curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
    curl_setopt($chCURLOPT_REFERER$url);
    curl_setopt ($chCURLOPT_SSL_VERIFYHOST1);
       
    curl_setopt($chCURLOPT_HEADERfalse);


    curl_setopt($chCURLOPT_URL'https://supply.elfmoney.ru/accounts/login/');
     
     
    $post = array(
    'csrfmiddlewaretoken' => $token,
    'next' => '/new/',
    'password' => $password,
    'username' => $login
    );
     
    curl_setopt($chCURLOPT_POSTFIELDShttp_build_query($post));
    $answer curl_exec($ch);
     echo 
    'Ошибка curl: ' curl_error($ch);
    echo 
    $answer;
     
    curl_close($ch);

    function 
    getSslPage($url) {
        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE);
        
    curl_setopt($chCURLOPT_HEADERfalse);
        
    curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
        
    curl_setopt($chCURLOPT_URL$url);
        
    curl_setopt($chCURLOPT_REFERER$url);
        
    curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
        
    $result curl_exec($ch);
        
    curl_close($ch);
        return 
    $result;
    }
    ?>
     
  2. GAiN

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

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    Всем привет!
    что лучше применить для защиты исходного кода в php файлах ? есть ли надёжный крипт ?
    чем удобно и надёжно кодировать содержимое и что бы такое содержимое могло работать на разных серверах apache, nginx...
     
  3. roxblnfk

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

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    я бы смотрел в сторону bcompiler'а
     
  4. Партнёр

    Joined:
    7 Sep 2010
    Messages:
    224
    Likes Received:
    67
    Reputations:
    1
    Пытался выполнить $fp = fsockopen("ssl://google.com", 443);
    TopServer 2.1 (PHP 5.1.6) выдал:
    Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? (40)
    Полез в php.ini, раскомментировал php_openssl.dll.
    Перезагрузил topserver, а там, оказывается, нет такого dll. Стал пробовал разные php_openssl.dll из интернетов - везде после перезагрузки показывает то "Не найдена указанная процедура", то "Не найден указанный модуль".
    Что ж делать? Или я вообще не туда копаю, и для открытия сокета по ssl нужен другая библиотека (не openssl)?
    Только cURL не предлагайте, пожалуйста.
     
  5. madam

    madam Member

    Joined:
    27 Mar 2014
    Messages:
    134
    Likes Received:
    5
    Reputations:
    1
    вот http://hardmandev.com/wa-data/public/site/files/denwerlib.zip

    необходимый набор библиотек для Openssl
     
    #22345 madam, 13 Jan 2015
    Last edited: 13 Jan 2015
  6. hpol

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

    Joined:
    11 Dec 2013
    Messages:
    62
    Likes Received:
    16
    Reputations:
    15
    Почему так работает

    <?php
    $s=file_get_contents('http://site.ru/');
    preg_match_all('|/templates/(.*?)/favicon.ico|i', $s, $m);
    echo "".$m[1][0]."";
    ?>

    А так ошибка

    <?php
    $s=file_get_contents('http://$_SERVER['SERVER_NAME']');
    preg_match_all('|/templates/(.*?)/favicon.ico|i', $s, $m);
    echo "".$m[1][0]."";
    ?>
     
  7. TADIAMOND

    TADIAMOND Member

    Joined:
    19 Feb 2011
    Messages:
    140
    Likes Received:
    40
    Reputations:
    6
    В одинарные ковычки поставил!
     
  8. hpol

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

    Joined:
    11 Dec 2013
    Messages:
    62
    Likes Received:
    16
    Reputations:
    15
    <?php
    $s=file_get_contents("http://$_SERVER['SERVER_NAME']");
    preg_match_all('|/templates/(.*?)/favicon.ico|i', $s, $m);
    echo "".$m[1][0]."";
    ?>

    Все равно ошибка
     
  9. roxblnfk

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

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    PHP:
    $s=file_get_contents("http://{$_SERVER['SERVER_NAME']}");
    или (не желательно)
    PHP:
    $s=file_get_contents("http://$_SERVER[SERVER_NAME]");
    или
    PHP:
    $s=file_get_contents('http://'.$_SERVER['SERVER_NAME']);
     
    #22349 roxblnfk, 15 Jan 2015
    Last edited: 15 Jan 2015
  10. Партнёр

    Joined:
    7 Sep 2010
    Messages:
    224
    Likes Received:
    67
    Reputations:
    1
    то же самое
     
  11. vegetativniy

    vegetativniy Banned

    Joined:
    23 Dec 2013
    Messages:
    31
    Likes Received:
    10
    Reputations:
    5
    Как вывести все фразы из текстовика, которые соответствуют регулярке.
    К примеру в файле много буков, я хочу вывести все предложения со словом привет

    Записи в файле в виде
     
  12. mastaadon

    mastaadon New Member

    Joined:
    26 Mar 2009
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    Привет,

    у меня скрипт который парсит стратицу _http://www.calleasy.com/rates/calling-rates
    по умолчанию, на странице выбрана валюта USD и до того как парсить страницу, мне нужно сменить на EUR.
    Насколько я смог разобраться, после переключения на странице вылюты на EUR, в браузере меняется кука "preferredcurrency".

    Как сменить валюту на евро, при загрузке страницы при помощи CuRL?
     
  13. miniden

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

    Joined:
    20 Oct 2006
    Messages:
    258
    Likes Received:
    34
    Reputations:
    6
    PHP:
    curl_setopt($chCURLOPT_COOKIEFILE"cookie.txt"); 
    или
    PHP:
    curl_setopt($chCURLOPT_COOKIE"preferredcurrency=EUR");
     
    1 person likes this.
  14. mastaadon

    mastaadon New Member

    Joined:
    26 Mar 2009
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    Испробовал второй метод но не помогает.
    в первом методе нужно что либо вписивыть в файл cookie.txt?
     
  15. wmobile1

    wmobile1 New Member

    Joined:
    18 Feb 2011
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Помогите не работает скрипт
    данные в формах изменяю жму 0к и ничего не изменяется в базе
    и как вывести эти даты в другом формате не так как в базе (6555455656)
    нужно редактировать даты на веб странице!

    Code:
    <?php
     
    /* Соединяемся с базой данных */
    $hostname = "localhost"; // название/путь сервера, с MySQL
    $username = "root"; // имя пользователя (в Denwer`е по умолчанию "root")
    $password = ""; // пароль пользователя (в Denwer`е по умолчанию пароль отсутствует, этот параметр можно оставить пустым)
    $dbName = "baza"; // название базы данных
     
    /* Таблица MySQL, в которой хранятся данные */
    $table = "members";
     
    /* Создаем соединение */
    mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");
     
    /* Выбираем базу данных. Если произойдет ошибка - вывести ее */
    mysql_select_db($dbName) or die (mysql_error());
     
    /* Если была нажата кнопка редактирования, вносим изменения */
    if(@$submit_edit) {
    $query = "UPDATE $table SET `joined`='".$name_reas_can."' WHERE `id_rea_can`='.$update.'";
    /* Выполняем запрос. Если произойдет ошибка - вывести ее. */
    mysql_query($query) or die (mysql_error());
    }
     
    /* Заносим в переменную $res всю базу данных */
    $query = "SELECT * FROM $table";
    /* Выполняем запрос. Если произойдет ошибка - вывести ее. */
    $res = mysql_query($query) or die(mysql_error());
    /* Узнаем количество записей в базе данных */
    $row = mysql_num_rows($res);
     
    /* Выводим данные из таблицы */
    echo ("
    <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
    <html xmlns=\"http://www.w3.org/1999/xhtml\">
     
    <head>
     
        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
     
        <title>Редактирование и обновление данных</title>
     
    <style type=\"text/css\">
    <!--
    body { font: 12px Georgia; color: #666; }
    h3 { font-size: 16px; text-align: center; }
    table { width: 400px; border-collapse: collapse; margin: 5px auto; background: #E6E6E6; }
    td { padding: 3px; vertical-align: middle; }
    input { width: 250px; border: solid 1px #CCC; color: #FF6666; }
    textarea { width: 250px; height: 100px; border: solid 1px #CCC; color: #FF6666; }
    .buttons { width: auto; border: double 1px #666; background: #D6D6D6; color: #000; }
    #num { width: 20px; text-align: right; margin-right: 5px; float: right; }
    -->
    </style>
     
    </head>
     
    <body>
     
    <h3>Редактирование и обновление данных в таблице MySQL</h3>
    ");
     
    /* Цикл вывода данных из базы конкретных полей */
    while ($row = mysql_fetch_array($res)) {
        echo "<form action=\"index.php\" method=\"post\" joined=\"edit_form\">\n";
        echo "<input type=\"hidden\" joined=\"update\" value=\"".$row["id_rea_can"]."\" />\n";
        echo "<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\">\n";
        echo "<tr>\n";
        echo "<td colspan=\"2\" style=\"border-bottom:solid 1px #CCCCCC;\"><b><i><div id_rea_can=\"num\">#".$row["id_rea_can"]."</div></b></i></td>\n";
        echo "</tr><tr>\n";
        echo "<td>Naimenovanie:</td><td><input type=\"text\" value=\"".$row['joined']."\" joined=\"joined\" /></td>\n";
        echo "</tr><tr>\n";
       
        echo "<td colspan=\"2\" align=\"center\"><input type=\"submit\" namjoined=\"submit_edit\" class=\"buttons\" value=\"Сохранить изменения\" /></td>\n";
        echo "</tr></table></form>\n\n";
    }
     
     
    /* Закрываем соединение */
    mysql_close();
     
    /* Выводим ссылку возврата */
    echo ("<div style=\"text-align: center; margin-top: 10px;\"><a href=\"index.html\">Вернуться назад</a></div>");
     
  16. mastaadon

    mastaadon New Member

    Joined:
    26 Mar 2009
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    Похоже что я понял почему отправка кук опцией
    PHP:
    curl_setopt($chCURLOPT_COOKIE"preferredcurrency=EUR"); 
    не помогает в моем случае. Если я не ошибаюсь, куки отправляются и читаются javascript
    Code:
    prefcur = retrieveCookie('preferredcurrency');
    (Это фрагмент из скрипта)

    Только мне нужна помощь как мне в таком случае сменить ваюту прежде чем я буду парсить страницу?
     
  17. roxblnfk

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

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    все значения пересчитываются скриптом, а не подгружаются
    по сути у тебя всё на руках, нужно только переписать функцию из JS в PHP

    эти два вызова функции висят на событиях [изменение значения] у списков валют и стран:
    PHP:
    alterRatesTable(this[this.selectedIndex].value,                            truecurrency_symbols3,    'true', $('#select-rates-country').val());
    alterRatesTable(document.getElementById('select-rates-currency').valuetruecurrency_symbols'3','true'this[this.selectedIndex].value)
    код функции alterRatesTable — перерисовки таблицы, где берутся коэффициенты и пересчитываются значения. код привел к более человеческому виду и кое что прокомментировал для лёгкого старта:
    PHP:
    /*e - выбранная валюта например "0.1003;ARS/min"  отсюда: <option value="0.1003;ARS/min">Argentine Peso</option>
    r - отображать ли символ валют
    s - массив символик валют отсюда: http://www.calleasy.com/resource/js/currency_symbols.min.js
    t - знаки после запятой (3)
    n - хз
    l - страна*/
    function alterRatesTable(erstnl) {
        var 
    = {
                
    4020,
                
    5621,
                
    10020,
                
    19125,
                
    19619,
                
    20321,
                
    20825,
                
    23320,
                
    24624,
                
    25020,
                
    27619,
                
    30023,
                
    34827,
                
    37223,
                
    38022,
                
    42821,
                
    44021,
                
    44217,
                
    47018,
                
    52821,
                
    61623,
                
    62023,
                
    64224,
                
    70319,
                
    70522,
                
    72421,
                
    75225,
                
    82620
            
    },
            
    "undefined" != typeof a[l] ? new Date > new Date("01/01/2015") ? a[l] : 15 0,
            
    document.getElementById("rates-table"),
            
    e.split(";"),    // разбивается "0.1003;ARS/min"
            
    c[0],    // коэффициент, множитель = 1 / 0.1003
            
    c[1];    //  ARS/min
        
    f.split(";");
        
    f[1];
        
    f[0];    // ARS/min
        
    var = new String(f),
            
    w.split("/min"),    // [0]=>ARS
            
    p[0],    // ARS
            
    0,
            
    d.split("/"); // ARS
        
    if (L[0], null != i)
            if (
    i.rows[0].cells[1].innerHTML f== orgtabledata.length) {
                var 
    0,
                    
    = new Array;
                for (
    m.push("dumb and"), m.push("dumber"), orgtabledata.push(m), 1i.rows.lengthb++)
                    if (
    "rates-letters" != i.rows[b].cells[0].className) {
                        var 
    "object" == typeof i.rows[b].cells[2];
                        if (
    "column-rate" == i.rows[b].cells[1].className) {
                            var 
    = new Array;
                            
    T.push(i.rows[b].cells[1].innerHTML), && T.push(i.rows[b].cells[2].innerHTML), orgtabledata.push(T);
                            var 
    stripNbsp(i.rows[b].cells[1].innerHTML); - != h.indexOf(" ") && (h.substr(h.indexOf(" ") + 1h.length 1)), parseFloat(h) + parseFloat(h) * (100);
                            var 
    parseFloat(h),
                                
    parseFloat(g);
                            
    isNaN(H) || (i.rows[b].cells[0].innerHTML alterLink(i.rows[b].cells[0].innerHTMLd), == ? (s[L] && (s[L]), "false" == && (""), i.rows[b].cells[1].innerHTML " " formatCur(ut), && (i.rows[b].cells[2].innerHTML " " formatCur(ut))) : isNaN(v) ? (i.rows[b].cells[1].innerHTML formatCur(ut), && (i.rows[b].cells[2].innerHTML "")) : (i.rows[b].cells[1].innerHTML formatCur(ut), && (i.rows[b].cells[2].innerHTML formatCur(ut))))
                        } else 
    orgtabledata.push(m)
                    } else 
    orgtabledata.push(m)
            } else {
                var 
    0;
                for (
    i.rows[0].cells[1].innerHTML f1i.rows.lengthb++)
                    if (
    "rates-letters" != i.rows[b].cells[0].className) {
                        var 
    "object" == typeof i.rows[b].cells[2];
                        if (
    "column-rate" == i.rows[b].cells[1].className) {
                            var 
    stripNbsp(orgtabledata[b][0]); - != h.indexOf(" ") && (h.substr(h.indexOf(" ") + 1h.length 1)), parseFloat(h) + parseFloat(h) * (100);
                            var 
    parseFloat(h),
                                
    parseFloat(g);
                            
    isNaN(H) || (i.rows[b].cells[0].innerHTML alterLink(i.rows[b].cells[0].innerHTMLd), == ? (s[L] && (s[L]), "false" == && (""), i.rows[b].cells[1].innerHTML " " formatCur(ut), && (i.rows[b].cells[2].innerHTML " " formatCur(ut))) : isNaN(v) ? (i.rows[b].cells[1].innerHTML formatCur(ut), && (i.rows[b].cells[2].innerHTML "&nbsp;&nbsp;")) : (i.rows[b].cells[1].innerHTML formatCur(ut), && (i.rows[b].cells[2].innerHTML formatCur(ut))))
                        }
                    }
            }
        
    d.split("/"), setCookie("preferredcurrency"d[0], 31536e3"/"), setCookie("preferredisocode"l31536e3"/")
    }
     
  18. mastaadon

    mastaadon New Member

    Joined:
    26 Mar 2009
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    roxblnfk, спасибо запомощь.
    Честно говоря, мне тоже приходила мысль пересчитывать полученные значания в евро, только я тогда еще не разобрался откуда брать курсы валют, что бы они оказались равными с источником. Я не обращал внимания на то что они есть в скрипте, пока вы не показали в комментариях. Теперь ясно откуда их можно выташить. B к тому же я думал только над отправкой кук, потому как сайтов, которые буду парсить много и только на нескольких из них цены по умолчанию показывают не в EUR.

    Насколько я понял, передать JavaScript куки без эмуляции браузера задача сложная. Верно или нет?
     
  19. roxblnfk

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

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    Я что-то не понял, ведь JavaScript и так выполняется в браузере, зачем тогда нужна его эмуляция?
     
  20. mastaadon

    mastaadon New Member

    Joined:
    26 Mar 2009
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    Я имел в виду если все же попытаться отправить куки javascript до того как парсить страницу. То есть, если не возможно отправить куки curl, то наверно можно эмулировать работу браузера, передать куки а после парсить страницу.
     
Thread Status:
Not open for further replies.