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

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

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

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    Поправлюсь

    Какой это нафиг кодинг, это страданее хренью. В этой теме вопросы по темам - функции в PHP, синтаксис и другое, но никак не о "какой двиг лучше".
     
  2. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    Эта тема чисто о Php! че вы тут демагогию разводите...
     
    1 person likes this.
  3. life_is_shit

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

    Joined:
    21 Aug 2007
    Messages:
    300
    Likes Received:
    149
    Reputations:
    19
    помогите плиз.

    Задача такова.
    Есть два скрипта на разных серваках.
    С первого нужно передать некоторые параметры Post/get'ом (всеравно) во второй, второй должен получить их, отработать что-нибуть и вернуть результат в первый.

    главное! работу второго я не должен видеть, я должен видеть только результат который он вернет в первый скрипт.
    заранее спасиба.

    з.ы. если несложно напишите элементарный пример.
     
  4. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    В скрипт_1 сделай include/require скрипт_2?пармаетры, а скрипт_2 пусть свой результат формирует обычным выводом (без <html>, <body> и т.д.)
     
  5. life_is_shit

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

    Joined:
    21 Aug 2007
    Messages:
    300
    Likes Received:
    149
    Reputations:
    19
    а без инклуда никак нельзя?
    если сложно, то пусть второй просто выполнится, не возвращая никаких результатов.
     
  6. n1†R0x

    n1†R0x Elder - Старейшина

    Joined:
    20 Jan 2007
    Messages:
    728
    Likes Received:
    376
    Reputations:
    235
    PHP:
    <?php
    //script#1
    $data file_get_contents("http://localhost/script2.php?param1=yes&param2=999");
    //обработка?
    print $data;
    ?>
    либо напрямую через сокеты
     
  7. life_is_shit

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

    Joined:
    21 Aug 2007
    Messages:
    300
    Likes Received:
    149
    Reputations:
    19
    через file_get_contents тоже не годицца, так как параматры приходица передавать в таком виде:
    ?to=bill%40melkosoft.com&from=hax0r%40evil.com&subj=bI+bI+bI

    Напиши плз пример для сокетов.
     
  8. ant0ha

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

    Joined:
    22 May 2007
    Messages:
    130
    Likes Received:
    50
    Reputations:
    13
    Если curl поддерживается тогда в твоем случае лучше делать через него
    PHP:
    <?php
      $ch 
    curl_init("http://www.site.ru/script.php");
      
      
    $result=curl_exec($ch);
      
      
    curl_close($ch);
      
      echo 
    $result;
    ?>
    в переменной $result будет ответ сервера.
     
  9. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    ant0ha, вот фигли он будет в переменной? Про параметр CURLOPT_RETURNTRANSFER слышали? Вот только после его инициализации будет возвращён результат в переменную...

    Жись_Гавно, а ты можешь воспользоваться функцией, которая реализует транспорт через либу CURL (писал для себя, поддерживается множество методов). Вот исходник (форматирование поехало, но всё равно разберёшься):

    PHP:
    define("HTTP_GET",     0x0001);
    define("HTTP_POST",     0x0002);
    define("HTTP_HEAD",     0x0003);
    define("HTTP_PUT",      0x0004);
    define("HTTP_DELETE",   0x0006);
    define("HTTP_TRACE",    0x0007);
    define("HTTP_OPTIONS",  0x0008);
    define("HTTP_PROPFIND"0x0009);

    define("HTTP_10",       0x0001);
    define("HTTP_11",       0x0002);


    function 
    httpRequest (
    $requestMethod,   // HTTP метода - одна из определённых выше констант
    $requestVersion,   // HTTP версия - одна из определённых выше констант
    $requestUrl,   // Урла запроса
    $requestHeaders,   // Хидеры запроса
    $requestBody,   // Тело запроса
    $requestTimeout,   // Таймаут-запроса
    $requestProxy,   // Прокси для соединения
    &$responseCode null,   // Переменная, куда будет возвращён HTTP код ответа
    &$responseHeaders null,   // Переменная куда будет возвращены хидеры ответа
    &$responseBody null,   // Переменная куда будет возвращено тело запроса
    &$errCode null,   // Номер ошибки CURL
    &$errString null)   // Описание ошибки CURL
    {
            if (!
    is_integer($requestTimeout))
                return (
    $responseCode $responseHeaders $responseContent false);

            
    $urlData parse_url($requestUrl);

            if (!isset(
    $urlData["host"]))
                return (
    $responseCode $responseHeaders $responseContent false);

            if (!isset(
    $urlData["scheme"])) $urlData["scheme"] = "http";
            if (!isset(
    $urlData["path"])) $urlData["path"] = "/";
            if (!isset(
    $urlData["port"]) && $urlData["scheme"] == "http"$urlData["port"] = 80;
            if (!isset(
    $urlData["port"]) && $urlData["scheme"] == "https"$urlData["port"] = 443;

            switch (
    $requestMethod) {
                case 
    HTTP_GET :
                    
    $httpMethod "GET";
                break;

                case 
    HTTP_POST :
                    
    $httpMethod "POST";
                break;

                case 
    HTTP_HEAD :
                    
    $httpMethod "HEAD";
                break;

                case 
    HTTP_PUT :
                    
    $httpMethod "PUT";
                break;

                case 
    HTTP_DELETE :
                    
    $httpMethod "DELETE";
                break;

                case 
    HTTP_TRACE :
                    
    $httpMethod "TRACE";
                break;

                case 
    HTTP_OPTIONS :
                    
    $httpMethod "OPTIONS";
                break;

                case 
    HTTP_PROPFIND :
                    
    $httpMethod "PROPFIND";
                break;

                default :
                    return (
    $responseCode $responseHeaders $responseContent false);
                break;
            }

            switch (
    $requestVersion) {
                case 
    HTTP_10 :
                    
    $httpVersion "1.0";
                break;

                case 
    HTTP_11 :
                    
    $httpVersion "1.1";
                break;

                default :
                    return (
    $responseCode $responseHeaders $responseContent false);
                break;
            }

            if (isset(
    $urlData["query"]))
                
    $customRequest  sprintf("%s %s?%s HTTP/%s\r\n"$httpMethod$urlData["path"], $urlData["query"], $httpVersion);
            else
                
    $customRequest  sprintf("%s %s HTTP/%s\r\n"$httpMethod$urlData["path"], $httpVersion);

            
    $customRequest .= sprintf("Host: %s\r\n"$urlData["host"]);

            foreach (
    $requestHeaders as $header)
                
    $customRequest .= sprintf("%s\r\n"$header);

            if (
    $requestMethod == HTTP_POST || $requestMethod == HTTP_PUT)
                if (
    strlen($requestBody) > 0$customRequest .= sprintf("Content-Length: %s\r\n"strlen($requestBody));
                else return (
    $responseCode $responseHeaders $responseContent false);

            if (isset(
    $urlData["user"]) && isset($urlData["pass"])) {
                
    $authValue sprintf("%s:%s"$urlData["user"], $urlData["pass"]);
                
    $customRequest .= sprintf("Authorization: Basic %s\r\n"base64_encode($authValue));
            }

            
    $customRequest .= sprintf("Connection: close\r\n"$urlData["host"]);
            
    $customRequest .= "\r\n";

            if (
    $requestMethod == HTTP_POST || $requestMethod == HTTP_PUT)
                if (
    strlen($requestBody) > 0$customRequest .= sprintf("%s"$requestBody);
                else return (
    $responseCode $responseHeaders $responseContent false);

            
    $curlHandler curl_init();

            
    $curlOptions = array (
                
    CURLOPT_URL                    =>    sprintf("%s://%s"$urlData["scheme"], $urlData["host"]),
                
    CURLOPT_PORT                =>    $urlData["port"],
                
    CURLOPT_TIMEOUT            =>    $requestTimeout,
                
    CURLOPT_CUSTOMREQUEST    => $customRequest,
                
    CURLOPT_FOLLOWLOCATION    => true,
                
    CURLOPT_HEADER                => true,
                
    CURLOPT_RETURNTRANSFER    => true,
                
    CURLOPT_FAILONERROR        => false,
                
    CURLOPT_VERBOSE            => false,
                
    CURLOPT_NOPROGRESS        => true
            
    );

            if (
    $urlData["scheme"] == "https") {
                
    $curlOptions[CURLOPT_SSL_VERIFYPEER] = false;
                
    $curlOptions[CURLOPT_SSL_VERIFYHOST] = false;
            }

            if (
    $requestMethod == HTTP_HEAD || $requestMethod == HTTP_OPTIONS || $requestMethod == HTTP_DELETE)
                
    $curlOptions[CURLOPT_NOBODY] = true;
            else
                
    $curlOptions[CURLOPT_NOBODY] = false;

            if (!
    is_null($requestProxy)) {
                
    $proxyData parse_url("http://" $requestProxy);

                if (isset(
    $proxyData["user"]) && isset($proxyData["pass"]))
                    
    $curlOptions[CURLOPT_PROXYUSERPWD]    = sprintf("%s:%s"$proxyData["user"], $proxyData["pass"]);

                if (!isset(
    $proxyData["host"]) && !isset($proxyData["port"]))
                    return (
    $responseCode $responseHeaders $responseContent false);

                
    $curlOptions[CURLOPT_PROXY]                = sprintf("%s:%d"$proxyData["host"], $proxyData["port"]);
                
    $curlOptions[CURLOPT_HTTPPROXYTUNNEL]    = sprintf("%s:%d"$proxyData["host"], $proxyData["port"]);
            }

            
    $result curl_setopt_array($curlHandler$curlOptions);
            if (!
    $result) return ($responseCode $responseHeaders $responseContent false);

            
    $response curl_exec($curlHandler);

            
    $errCode        curl_errno($curlHandler);
            
    $errString    sprintf("Error: %s"curl_error($curlHandler));

            if (
    curl_errno($curlHandler) != CURLE_OK) {
                
    $responseCode        false;
                
    $responseHeaders    false;
                
    $responseContent    false;

                
    curl_close($curlHandler);

                return 
    false;
            }

            
    curl_close($curlHandler);

            list(
    $headers$responseBody) = preg_split("/\r\n\r\n/"$response2);

            
    $headers                        preg_split("/\r\n/"$headers);
            list(,
    $responseCode,)    = sscanf(array_shift($headers), "%s %d %s");

            
    $responseHeaders    $headers;

            return 
    true;
        }
    Ну или если ты любитель сокет, то вот пример, только для метода GET, но если ты знаешь принципы и спецификацию протокола HTTP, то реализовать другой метод тебе труда не составит:

    PHP:
            function httpGetRequest ($remoteUrl, &$respCode, &$respBody) {
                
    $urlData parse_url($remoteUrl);

                if (!isset(
    $urlData["host"])) return false;
                if (!isset(
    $urlData["port"])) $urlData["port"] = 80;
                if (!isset(
    $urlData["path"])) $urlData["path"] = "/";

                
    $socket fsockopen($urlData["host"], $urlData["port"], $errno$errstr60);
                if (!
    $socket) return false;

                
    $resource $urlData["path"];
                if (isset(
    $urlData["query"])) $resource .= "?{$urlData["query"]}";

                
    $sendData  "GET {$resource} HTTP/1.1\r\n";
                
    $sendData .= "Host: {$urlData["host"]}\r\n";
                
    $sendData .= "User-Agent: DaMaGeLaB Crawler\r\n";
                
    $sendData .= "Accept: */*\r\n";
                
    $sendData .= "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\r\n";
                
    $sendData .= "Pragma: no-cache";
                
    $sendData .= "Connection: Close\r\n\r\n";

                
    $ret fwrite($socket$sendData);
                if (!
    $ret) return false;

                
    $buffer "";
                while (!
    feof($socket)) {
                    
    $buffer .= fgets($socket8192);
                }

                
    fclose($socket);

                list(
    $headers$content) = preg_split("/\r\n\r\n/"$buffer2);

                if (
    strlen($content) <= || strlen($headers) <= 0) return false;

                
    $respCode intval(substr($headers93));
                
    $respBody $content;

                return 
    true;
            }
     
    3 people like this.
  10. ant0ha

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

    Joined:
    22 May 2007
    Messages:
    130
    Likes Received:
    50
    Reputations:
    13
    Да, поторопился с ответом, вот как нужно было:

    PHP:
    <?php
      $ch 
    curl_init("http://www.site.ru/script.php");
      
      
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);

      
    $result=curl_exec($ch);
      
      
    curl_close($ch);
      
      echo 
    $result;
    ?> 
     
    2 people like this.
  11. life_is_shit

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

    Joined:
    21 Aug 2007
    Messages:
    300
    Likes Received:
    149
    Reputations:
    19
    задача решилась всем кто помогал пасиба, отдельное Грандхогу)
     
  12. Reanimat0R

    Reanimat0R New Member

    Joined:
    10 Jun 2007
    Messages:
    21
    Likes Received:
    2
    Reputations:
    0
    Подскажите пожалуйста, как поменять время создания .php файла, и в какие директории можно закинуть шел чтобы его можно было запустить.(Ipb 2.3.1)
    Огромное спасибо
     
  13. NOmeR1

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    Запихнуть вроди можно в upload, там права 0777, а вот время создания файла ты вряд ли изменишь.
     
  14. ant0ha

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

    Joined:
    22 May 2007
    Messages:
    130
    Likes Received:
    50
    Reputations:
    13
    можно попробовать выполнить системную команду touch
    Code:
    touch ММДДччммГГ путь_к_файлу
     
  15. n1†R0x

    n1†R0x Elder - Старейшина

    Joined:
    20 Jan 2007
    Messages:
    728
    Likes Received:
    376
    Reputations:
    235
    Зачем пользоваться системной командой, если существует функция?
    http://ru.php.net/manual/ru/function.touch.php

    по никсовой команде:
    http://ru.wikipedia.org/wiki/Touch

     
    #475 n1†R0x, 13 Sep 2007
    Last edited: 13 Sep 2007
  16. Paranoiac

    Paranoiac New Member

    Joined:
    12 Sep 2007
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Помогите составить регулярку чтобы проверить логин ползователя

    1. не должен состоять из разных алфавитов одновременно ( может быть либо русский либо английский)

    2. может содержать цифры, один пробел, два нижних подчеркивания "_"
     
  17. NOmeR1

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    Одной регуляркой здесь не справиться.
    PHP:
    <?
    $login 'My_name_is hacker';
    if(
    preg_match('/^([A-Za-z0-9_\s]+|[А-Яа-я0-9_\s]+)$/i',$login) && substr_count($login,' ') <= && substr_count($login,'_') <= 2)
    {
     echo(
    'Логин "'.$login.'" введён верно');
    }
    else
    {
     echo(
    'Логин "'.$login.'" введён неверно');
    }
    ?>
     
    1 person likes this.
  18. Fr-Ron

    Fr-Ron Elder - Старейшина

    Joined:
    10 Sep 2006
    Messages:
    184
    Likes Received:
    72
    Reputations:
    13
    На удаленном хосте есть текстовый файл. Каким скриптом можно этот файл взять и сохранить (или вывести) на своем хосте, где скрипт лежит?
    Файл - www.ultracomp.ru/prices/ULTRA_Msk_All_Txt.txt .
    Через ftp файл не взять, через fopen("$url", "r") тоже.
     
    #478 Fr-Ron, 13 Sep 2007
    Last edited: 13 Sep 2007
  19. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    http://ru2.php.net/manual/ru/function.file-get-contents.php
     
  20. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    ещё можно

    $f = file('http://www.ultracomp.ru/prices/ULTRA_Msk_All_Txt.txt');
    echo implode($f);

    Только там наверное будет HTTP запрос писаться, если будет, отрешь всё что выше \r\n\r\n
     
Thread Status:
Not open for further replies.