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

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

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

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

    Joined:
    2 Apr 2011
    Messages:
    2,531
    Likes Received:
    166
    Reputations:
    99
    php 301 редирект и реферер

    location redirect на php странный, когда редирект 301 идёт внутри сайта, то реферер не передаёт, если проксирую ссылку через него же - то передаётся

    в чём подвох тогда ?

    PHP:
    <?php
    $url 
    = preg_replace("/[^a-z0-9\/\.\_\?\=\&]/i", "", $_GET['url']);
    $redirect = 'http://'.$url;
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: $redirect");
    ?>
     
  2. pavl1k_fan@mail.ru

    pavl1k_fan@mail.ru New Member

    Joined:
    3 Jul 2009
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0

    PHP:
    <?php 
    $url 
    = 'http://promodj.com';                                // URL сайта на котором будем авторизоваться  
    $urlTo = 'http://promodj.com/login';                               // URL на которой будем слать POST данные 
    $login = '1';                          // Ваш логин  
    $pass = '1';                                     // Ваш пароль  
    $post = 'backto=promodj.com&unsafeip=1&remember=1&login='.$login.'&password='.$pass;  // POST данные  

    $ch = curl_init();                              // Инициализируем сеанс CURL  
    curl_setopt($ch, CURLOPT_URL, $url);  // Заходим на сайт  
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);  // Иногда бывает, что после отправки данных происходит редирект heaer('Location:...'). Этот параметр говорит о то, чтобы мы следовали за ними, а не оставались на месте после отправки данных 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Делаем так, чтобы страница не выдавалась сразу в поток, а можно было ее записать в переменную 
    $html = curl_exec($ch);                         // Имитируем заход на сайт  

    curl_setopt($ch, CURLOPT_URL, $urlTo);              // Устанавливаем адрес куда будем слать POST данные  
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');  // Записываем cookies в файл, чтобы потом можно было их считать 
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // Теперь читаем cookies с файла  
    curl_setopt($ch, CURLOPT_POST, true);               // Говорим, что информация будет отправляться методом POST  
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);        // Передаем POST данные 
    $html = curl_exec($ch); // Записываем пришедшие данные в переменную   

    curl_setopt($ch, CURLOPT_URL, "http://promodj.com/djs?onlinenow=1&sortby=date&page=11");              // Устанавливаем адрес куда будем слать POST данные  
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');  // Записываем cookies в файл, чтобы потом можно было их считать 
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // Теперь читаем cookies с файла  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Делаем так, чтобы страница не выдавалась сразу в поток, а можно было ее записать в переменную 


    $html = curl_exec($ch); // Записываем пришедшие данные в переменную   
    curl_close($ch);        // Закрываем сеанс работы CURL  
    echo $html;             // И вуаля :) Выводим авторизованную страницу  (djs?onlinenow=1&sortby=date&page=11)
    ?>
    Советую сделать отдельную ф-ию, которая будет совершать ВСЕ запросы (get, post, cookies) в зависимости от входных параметров :)
     
  3. 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($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . 'cookie.txt');
    curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . 'cookie.txt');
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 1);
       
    curl_setopt($ch, CURLOPT_HEADER, false);


    curl_setopt($ch, CURLOPT_URL, 'https://supply.elfmoney.ru/accounts/login/');
     
     
    $post = array(
    'csrfmiddlewaretoken' => $token,
    'next' => '/new/',
    'password' => $password,
    'username' => $login
    );
     
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_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($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        
    curl_setopt($ch, CURLOPT_HEADER, false);
        
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        
    curl_setopt($ch, CURLOPT_URL, $url);
        
    curl_setopt($ch, CURLOPT_REFERER, $url);
        
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        
    $result = curl_exec($ch);
        
    curl_close($ch);
        return 
    $result;
    }
    ?>
     
  4. GAiN

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

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

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

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

    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 не предлагайте, пожалуйста.
     
  7. madam

    madam Member

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

    необходимый набор библиотек для Openssl
     
    #22347 madam, 13 Jan 2015
    Last edited: 13 Jan 2015
  8. 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]."";
    ?>
     
  9. TADIAMOND

    TADIAMOND Member

    Joined:
    19 Feb 2011
    Messages:
    134
    Likes Received:
    34
    Reputations:
    5
    В одинарные ковычки поставил!
     
  10. 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]."";
    ?>

    Все равно ошибка
     
  11. 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']);
     
    #22351 roxblnfk, 15 Jan 2015
    Last edited: 15 Jan 2015
  12. Партнёр

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

    vegetativniy Banned

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

    Записи в файле в виде
     
  14. 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?
     
  15. miniden

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

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

    mastaadon New Member

    Joined:
    26 Mar 2009
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    Испробовал второй метод но не помогает.
    в первом методе нужно что либо вписивыть в файл cookie.txt?
     
  17. 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>");
     
  18. mastaadon

    mastaadon New Member

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

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

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

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

    эти два вызова функции висят на событиях [изменение значения] у списков валют и стран:
    PHP:
    alterRatesTable(this[this.selectedIndex].value,                            true, currency_symbols, 3,    'true', $('#select-rates-country').val());
    alterRatesTable(document.getElementById('select-rates-currency').value, true, currency_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(e, r, s, t, n, l) {
        var 
    a = {
                
    40: 20,
                
    56: 21,
                
    100: 20,
                
    191: 25,
                
    196: 19,
                
    203: 21,
                
    208: 25,
                
    233: 20,
                
    246: 24,
                
    250: 20,
                
    276: 19,
                
    300: 23,
                
    348: 27,
                
    372: 23,
                
    380: 22,
                
    428: 21,
                
    440: 21,
                
    442: 17,
                
    470: 18,
                
    528: 21,
                
    616: 23,
                
    620: 23,
                
    642: 24,
                
    703: 19,
                
    705: 22,
                
    724: 21,
                
    752: 25,
                
    826: 20
            
    },
            
    o = "undefined" != typeof a[l] ? new Date > new Date("01/01/2015") ? a[l] : 15 : 0,
            
    i = document.getElementById("rates-table"),
            
    c = e.split(";"),    // разбивается "0.1003;ARS/min"
            
    u = 1 / c[0],    // коэффициент, множитель = 1 / 0.1003
            
    f = c[1];    //  ARS/min
        
    f = f.split(";");
        
    f[1];
        
    f = f[0];    // ARS/min
        
    var w = new String(f),
            
    p = w.split("/min"),    // [0]=>ARS
            
    d = p[0],    // ARS
            
    g = 0,
            
    L = d.split("/"); // ARS
        
    if (L = L[0], null != i)
            if (
    i.rows[0].cells[1].innerHTML = f, 0 == orgtabledata.length) {
                var 
    b = 0,
                    
    m = new Array;
                for (
    m.push("dumb and"), m.push("dumber"), orgtabledata.push(m), b = 1; b < i.rows.length; b++)
                    if (
    "rates-letters" != i.rows[b].cells[0].className) {
                        var 
    M = "object" == typeof i.rows[b].cells[2];
                        if (
    "column-rate" == i.rows[b].cells[1].className) {
                            var 
    T = new Array;
                            
    T.push(i.rows[b].cells[1].innerHTML), M && T.push(i.rows[b].cells[2].innerHTML), orgtabledata.push(T);
                            var 
    h = stripNbsp(i.rows[b].cells[1].innerHTML); - 1 != h.indexOf(" ") && (h = h.substr(h.indexOf(" ") + 1, h.length - 1)), g = parseFloat(h) + parseFloat(h) * (o / 100);
                            var 
    H = parseFloat(h),
                                
    v = parseFloat(g);
                            
    isNaN(H) || (i.rows[b].cells[0].innerHTML = alterLink(i.rows[b].cells[0].innerHTML, d), 1 == r ? (s[L] && (L = s[L]), "false" == n && (L = ""), i.rows[b].cells[1].innerHTML = L + " " + formatCur(H * u, t), M && (i.rows[b].cells[2].innerHTML = L + " " + formatCur(v * u, t))) : isNaN(v) ? (i.rows[b].cells[1].innerHTML = formatCur(H * u, t), M && (i.rows[b].cells[2].innerHTML = "")) : (i.rows[b].cells[1].innerHTML = formatCur(H * u, t), M && (i.rows[b].cells[2].innerHTML = formatCur(v * u, t))))
                        } else 
    orgtabledata.push(m)
                    } else 
    orgtabledata.push(m)
            } else {
                var 
    b = 0;
                for (
    i.rows[0].cells[1].innerHTML = f, b = 1; b < i.rows.length; b++)
                    if (
    "rates-letters" != i.rows[b].cells[0].className) {
                        var 
    M = "object" == typeof i.rows[b].cells[2];
                        if (
    "column-rate" == i.rows[b].cells[1].className) {
                            var 
    h = stripNbsp(orgtabledata[b][0]); - 1 != h.indexOf(" ") && (h = h.substr(h.indexOf(" ") + 1, h.length - 1)), g = parseFloat(h) + parseFloat(h) * (o / 100);
                            var 
    H = parseFloat(h),
                                
    v = parseFloat(g);
                            
    isNaN(H) || (i.rows[b].cells[0].innerHTML = alterLink(i.rows[b].cells[0].innerHTML, d), 1 == r ? (s[L] && (L = s[L]), "false" == n && (L = ""), i.rows[b].cells[1].innerHTML = L + " " + formatCur(H * u, t), M && (i.rows[b].cells[2].innerHTML = L + " " + formatCur(v * u, t))) : isNaN(v) ? (i.rows[b].cells[1].innerHTML = formatCur(H * u, t), M && (i.rows[b].cells[2].innerHTML = "&nbsp;&nbsp;")) : (i.rows[b].cells[1].innerHTML = formatCur(H * u, t), M && (i.rows[b].cells[2].innerHTML = formatCur(v * u, t))))
                        }
                    }
            }
        
    d = d.split("/"), setCookie("preferredcurrency", d[0], 31536e3, "/"), setCookie("preferredisocode", l, 31536e3, "/")
    }
     
  20. mastaadon

    mastaadon New Member

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

    Насколько я понял, передать JavaScript куки без эмуляции браузера задача сложная. Верно или нет?
     
Thread Status:
Not open for further replies.