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

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

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

    Alexz291 New Member

    Joined:
    10 Mar 2012
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Привет, у меня возникла проблема я не могу подключить конфиг из каталога выше к php файлу, мне нужен какой нибудь более или менее универсальный способ нежели чем includ ить полный путь от корня сервера.

    Зараниее спасибо.
     
  2. Ю_ЗвЕРь

    Ю_ЗвЕРь Member

    Joined:
    23 Nov 2006
    Messages:
    98
    Likes Received:
    28
    Reputations:
    1
    Приветствую,

    На проекте несколько сабдоменов и хочется, чтобы в футере на каждом региональном сабдомене персональные контактные данные были. Пробую использовать макет, но пока без успехов:

    <?php
    $host = $_SERVER['REQUEST_URI'];
    if ($host == 'spb.domain.ru') { ?>
    Контакты Питера.
    <?php } ?>

    Подскажите, пожалуйста, как задать на каждый адрес свой текст. Спасибо.
     
  3. Konqi

    Konqi Green member

    Joined:
    24 Jun 2009
    Messages:
    2,251
    Likes Received:
    1,149
    Reputations:
    886
    $_SERVER['HTTP_HOST'] вместо request_uri
     
    _________________________
    1 person likes this.
  4. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    Ю_ЗвЕРь $_SERVER['REQUEST_URI'] содержит имя скрипта, а сравниваете вы с именем сервера, то бишь нужно изменить на HTTP_HOST, как посоветовал Konqi
     
    1 person likes this.
  5. Ю_ЗвЕРь

    Ю_ЗвЕРь Member

    Joined:
    23 Nov 2006
    Messages:
    98
    Likes Received:
    28
    Reputations:
    1
    Konqi, Skofield, ребята, огромная человеческая благодарность.
     
  6. 0o Chris o0

    0o Chris o0 New Member

    Joined:
    16 Oct 2011
    Messages:
    142
    Likes Received:
    1
    Reputations:
    0
    Из 500 изображений выбираются случайно 2 и выводятся на страницу, как сделать так, чтобы больше эти 2 изображения вместе не попались, и чтобы можно было определить, когда переберутся все возможные комбинации?
     
  7. mironich

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

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    Записывать хэши\пути\имена в БД.
     
  8. 0o Chris o0

    0o Chris o0 New Member

    Joined:
    16 Oct 2011
    Messages:
    142
    Likes Received:
    1
    Reputations:
    0
    Так и делал, брал 1 случайно, потом получал из базы имена всех остальных, затем отбрасывал те, с которыми оно уже выводилось, из оставшихся случайно выбирал второе изображение и выводил на экран, но теперь представь такую картину, у 498 изображений перебраны все комбинации и осталось 2 последних изображения, каков шанс того что 1 изображение окажется одним из этих двух.
     
  9. VKtraf

    VKtraf Member

    Joined:
    3 Feb 2012
    Messages:
    55
    Likes Received:
    10
    Reputations:
    5
    Всем привет!
    Парни, если не отнимет много времени, пожалуйста подскажите по вопросу.

    Хочу сделать заполнение профиля на php, заполнение Интересы работает (все - текстовые поля):

    auth.php ("ядро"):
    Code:
    <?
        // true т.к. мы будем отправлять post запрос:
        curl_setopt($ch, CURLOPT_POST, true);  
        // чтобы сайт думал, что мы - браузер:
        curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
        // ответ сервера будем записывать в переменную
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        // по редиректам будем переходить автоматически.
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_URL, 'http://login.vk.com/?act=login');
        //Формирование запроса таким образом, я счел более наглядным
        $post = array(
                    'act' => 'login',
                    'q' => '',
                    'al_frame' => '1',
                    'expire' => '',
                    'captcha_sid' => '',
                    'captcha_key' => '',
                    'from_host' => 'vk.com',
                    'email' => $login,
                    'pass' => $password
                );
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post)); /*Все данные, передаваемые в HTTP POST-запросе. Для передачи файла,
                                                                        укажите перед именем файла @, а также используйте полный путь к файлу.
                                                                        Тип файла также может быть указан с помощью формата ';type=mimetype',
                                                                        следующим за именем файла. Этот параметр может быть передан как в
                                                                        качестве url-закодированной строки, наподобие 'para1=val1&para2=val2&...',
                                                                        так и в виде массива, ключами которого будут имена полей, а значениями -
                                                                        их содержимое. Если value является массивом, заголовок Content-Type
                                                                        будет установлен в значение multipart/form-data. Начиная с версии PHP 5.2.0,
                                                                        при передаче файлов с префиксом @, value должен быть массивом.
                                                                       */
        $answer = curl_exec($ch); /* В $answer нам приходит javascript, который и устанавливает куки
                                     с названием: remixsid Нам нужно cпарсить эти 60 символов,
                                     идентификатора сессии. с помощью них vkontakte поймет,
                                     что мы авторизировались.*/
        $sid = substr($answer, strpos($answer, "setCookieEx('sid', '") + 20, 60);
        $cookie = 'remixsid=' . $sid;
        $_SESSION['cookie'] = $cookie;
        
        curl_setopt($ch, CURLOPT_POST, false); /*TRUE для использования обычного HTTP POST.
                                                Данный метод POST использует обычный application/x-www-form-urlencoded,
                                                обычно используемый в HTML-формах.
                                               */
        curl_setopt($ch, CURLOPT_COOKIE, $_SESSION['cookie']); //Содержимое заголовка "Cookie: ", используемого в HTTP-запросе. Обратите внимание, что несколько cookies разделяются точкой с запятой с последующим пробелом (например, "fruit=apple; colour=red") 
    
    ?>
    Сам скрипт для заполнения полей вкладки Интересы:

    Code:
    <?
    session_start();
    
    $user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) ' .
                'Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)';
    $cookie = '';
    $login = 'логин';
    $password = 'пароль';
    
    $ch = curl_init();
    
    include('auth.php');
    
    curl_setopt($ch, CURLOPT_URL, 'http://vk.com/edit?act=interests');
       
    
    $prehash = curl_exec($ch);
    
    // --- получаем хэш страницы Интересы ---
     preg_match_all('/"hash":"(\w+)"/i', $prehash, $interests_hash);
     $final_hash = $interests_hash[0][0]; 
     
     $final_hash = str_replace("\"", "", $final_hash);
     $final_hash = str_replace("hash:", "", $final_hash);
    // --- / --------------------------------
    
    
       //Формирование запроса таким образом, я счел более наглядным
        $post = array(
                    'act' => 'a_save_interests',
                    'activities' => 'Ничего не делаю',
                    'movies' => 'Боевики',
                    'music' => 'Led Zeppelin',
                    'hash' => 'TEMPORARY'
                );
    			
    	$post[hash] = $final_hash;
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
        $answer = curl_exec($ch);
        echo
    
        // укажем страницу, с которой мы получим данные для проверки
        curl_setopt($ch, CURLOPT_URL, 'http://vk.com/edit?act=interests');
       $answer = curl_exec($ch);
        echo $answer;
       
    
    
    curl_close($ch);
    ?>
    Пытаюсь сделать то же самое, но для вкладки Контакты (2 списка, 4 текстовых поля) - не получается, вообще не изменяет:
    Code:
    <?
    session_start();
    
    $user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) ' .
                'Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)';
    $cookie = '';
    $login = 'логин';
    $password = 'пароль';
    
    $ch = curl_init();
    
    include('auth.php');
    
    
    
    
     
     
    
    curl_setopt($ch, CURLOPT_URL, 'http://vk.com/edit?act=contacts');
    
    
    // --- получаем хэш страницы ---
    $prehash = curl_exec($ch);
     preg_match_all('/"hash":"(\w+)"/i', $prehash, $page_hash);
     $final_hash = $page_hash[0][0]; 
     
     $final_hash = str_replace("\"", "", $final_hash);
     $final_hash = str_replace("hash:", "", $final_hash);
    // --- получаем хэш страницы ---
    
    
       //Формирование запроса таким образом, я счел более наглядным
        $post = array(
                    'act' => 'a_save_contacts',
                    'city' => '2',
                    'country' => '2',
    				'email' => '',
                    'privacy_email' => '0',
                    'privacy_home' => '0',
                    'privacy_mobile' => '0',
                    'home' => '888',
                    'mobile' => 'NOKI',
                    'skype' => 'SKYPE',
                    'website' => 'VK',
                    'hash' => 'TEMPORARY'
                );
    	$post[hash] = $final_hash;			// записываем персональный хэш в массив
    	
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
        $answer = curl_exec($ch);
        echo
    
        // укажем страницу, с которой мы получим данные для проверки
        curl_setopt($ch, CURLOPT_URL, 'http://vk.com/edit?act=contacts');
       $answer = curl_exec($ch);
        echo $answer;
       
    
    
    curl_close($ch);
    ?>
    Т.е. я сначала просто заменил передаваемые поля массива $post на другие:
    'act' => 'a_save_contacts',
    'home' => '888',
    'mobile' => 'NOKI',
    'skype' => 'SKYPE',
    'website' => 'VK',

    но это не помогло.
    Тогда проснифал полную строку запроса и отправляю все параметры:
    'act' => 'a_save_contacts',
    'city' => '2',
    'country' => '2',
    'email' => '',
    'privacy_email' => '0',
    'privacy_home' => '0',
    'privacy_mobile' => '0',
    'home' => '888',
    'mobile' => 'NOKI',
    'skype' => 'SKYPE',
    'website' => 'VK',

    но это тоже не помогает, он не изменяет данные в профиле.

    Строка запроса при ручной отправке изменений вот такая:
    act=a_save_contacts&al=1&city=1&country=1&email=&hash=_тут_хэш_&home=Domashnij&mobile=Mobila&privacy_email=0&privacy_home=0&privacy_mobile=0&skype=Skype-nick&website=VKONTAKTE.RU

    Может ли быть причина в том, что на этой вкладке есть выпадающие списки - поэтому он и не изменяет?

    Пожалуйста подскажите, в чем может быть причина, полдня мучаюсь, никак не могу уговорить его работать с другими вкладками профиля.

    Заранее огромное спасибо! :)
     
  10. 0o Chris o0

    0o Chris o0 New Member

    Joined:
    16 Oct 2011
    Messages:
    142
    Likes Received:
    1
    Reputations:
    0
    Как перебрать все возможные комбинации из цифр длиной в 8 символов?
     
  11. VKtraf

    VKtraf Member

    Joined:
    3 Feb 2012
    Messages:
    55
    Likes Received:
    10
    Reputations:
    5
    0o Chris o0, вот:
    Code:
    <?php
    for ($i=10000000;$i<99999999;$i++) {
    	echo "$i<br>";
    }
    ?>
     
  12. daniel777

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

    Joined:
    8 Jul 2010
    Messages:
    517
    Likes Received:
    90
    Reputations:
    37
    Может подойдет еще функция sprintf()
     
  13. GAiN

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

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    от куда берется эта точка после include?
    её нет ни в одном файле, а в исходном коде она появляется.
    непонятно от куда...

    инклудим вот так:
    PHP:
    <?php
     
    include_once("tab.html");
     
    ?>
    исходный код уже так смотрится с точкой на 110 строке перед <style type=
    [​IMG]
     
  14. cat1vo

    cat1vo Level 8

    Joined:
    12 Aug 2009
    Messages:
    375
    Likes Received:
    343
    Reputations:
    99
    Проверь на скрытые символы.
     
  15. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    Имелось ввиду сделать перестановку? Например, 123:
    123
    321
    132
    231
    213
    312
    Если да, то для 8 символов получится 40 320 перестановок. Думаю на пхп это будет довольно-таки длительно. Хотя может есть простая реализация.
     
  16. m0Hze

    m0Hze Well-Known Member

    Joined:
    1 Nov 2008
    Messages:
    266
    Likes Received:
    655
    Reputations:
    208
    Может, простой range() подойдет?
    PHP:
    print_r(range(00000000,99999999));
     
  17. VKtraf

    VKtraf Member

    Joined:
    3 Feb 2012
    Messages:
    55
    Likes Received:
    10
    Reputations:
    5
    Актуально
    Парни, подскажите плиз, в чем может быть причина, что не могу править в ВК списки.
    На предыдущей странице мой пост: http://forum.antichat.ru/showpost.php?p=3131813&postcount=20697

    Заранее огромное спасибо! :)
     
  18. dotMX

    dotMX New Member

    Joined:
    4 Dec 2010
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте. Вопрос простой, но поставил в ступор. На чужом сайте есть форма для аплоада файлов с локального компьютера. Вопрос, как с помощью PHP можно сэмулировать передачу нужного мне файла в эту форму(и последующую её загрузку)? Спасибо.
     
  19. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    при помощи CURL
     
  20. 4XE

    4XE New Member

    Joined:
    10 May 2012
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Всем привет!
    Есть скрипт грабера html, найденный в интернетах (переходит на заданную страницу, сдирает код и сохраняет его в txt)

    PHP:
    <?php 
    function input_into($text)
    {
        
    $a_file=fopen("./grab_output.txt","a+");
        
    fputs($a_file,"$text");
        
    fclose($a_file);

    function 
    get_URL_by_socket ($host,$path) { 
     
    //Получает URL $path с хоста $host через сокеты.
     
    $fp fsockopen($host80); 
     if (!
    $fp) { 
      die (
    "Не могу получить данные с url http://$host/$path"); 
     } 
     else { 
      
    $out "GET $path HTTP/1.0\r\n"
      
    $out .= "Accept: image/gif, application/xhtml+xml, */*\r\n"
      
    $out .= "Accept-Language: ru\r\n"
      
    $out .= "Host: $host\r\n"
      
    //Имитируем браузер Opera Mini:
      
    $out .= "User-Agent: Opera/8.01 (J2ME/MIDP; ".
       
    "Opera Mini/2.0.4509/1716; ru; U; ssr)\r\n"
      
    $out .= "Cache-Control: no-cache\r\n"//Не кэшировать 
      
    $out .= "Connection: Close\r\n\r\n"
      
    fwrite($fp$out); 
      
    $headers ""
      while (
    $str trim(fgets($fp))) 
       
    $headers .= "$str\n"
      
    $body ""
      while (!
    feof($fp)) 
       
    $body .= fgets($fp); 
       
    input_into($body); 
      
    fclose($fp); 
     } 
     return 
    $body


    function 
    process($s,$start,$end,$include) { 
     
    //Парсит полученный файл - здесь-то и пишется главное
     //У нас это извлечение содержимого от $start до $end
     
    $s1=strpos ($s,$start);
     
    $s2=strpos ($s,$end);
     if (!
    is_integer($s1)) {
      return 
    "Не найден начальный сегмент: ".htmlspecialchars($start);
     }
     if (!
    is_integer($s2)) {
      return 
    "Не найден конечный сегмент: ".htmlspecialchars($end);
     }
     if (
    $s1>$s2) {
      return 
    "Конечный сегмент предшествует начальному";
     }
     if (
    $include) { //Включать начало и конец
      
    return substr ($s,$s1,$s2-$s1+strlen($end));
     }
     else { 
    //Исключить начало и конец
      
    $s1+=strlen($start);
      return 
    substr ($s,$s1,$s2-$s1);
     }


    function 
    parser ($host,$path,$start,$end,$include) {
     
    //Основной вызов парсера:
     //$host, $path - хост без http://www. и путь к файлу, начиная с /
     //$start, $end - строки начала и конца извлекаемого содержимого
     //$include - если true, включать в вывод строки $start и $end
     
    static $first=true;
     
    $sget_URL_by_socket ($host,$path); 
     if (
    $first) {  //Заголовок посылается только при 1-м вызове
      
    $first=false//Если вызывается из "движка" - можно убрать этот блок
      
    header('Conte    nt-type:text/html;charset=windows-1251'); 
     }
     return 
    process($s,$start,$end,$include);
    }

    $host="sitename.ru";
    $path="catalog/page=96";
    $start="<body>";
    $end="</body>";
    $include=true;
    print 
    parser ($host,$path,$start,$end,$include);


    ?> 

    хотелось бы расширить функционал этого скрипта,автоматизировать тк сказать, а именно что бы скрипт брал ссылки на сайт донор из txt

    PHP:
    $path="catalog/page=96";
    в txt ссылки выглядят так
    Code:
    catalog/page=1
    catalog/page=2
    catalog/page=3
    Т.е. скрипту необходимо
    Взять 1 ссылку
    Подставить её в код и выполнить его
    После этого взять 2 ссылку
    Подставить её в код и выполнить его //// и так все ссылки из файла .txt

    Как это реализовать ума не приложу...
    Заранее спасибо за любую помощь!
     
    #20540 4XE, 10 May 2012
    Last edited: 10 May 2012
Thread Status:
Not open for further replies.