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

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

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

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    GAiN

    http://pl1.php.net/manual/en/function.date.php
    http://pl1.php.net/manual/en/control-structures.if.php
    http://pl1.php.net/manual/en/function.echo.php
     
    _________________________
    1 person likes this.
  2. half-death

    half-death New Member

    Joined:
    4 Jul 2013
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Multi cUrl (POST after GET)

    Граждане помогите закончить скрипт или дать внятное объяснение. Скрипт написал в курле, всё работает как надо, но в мульти курле, он работать не хочет.
    Суть скрита в том, что отсылается гет запрос на сайт из ответа достаётся нужное нам значение и вместе с этим значением отсылается пост запрос, узнаётся ответ и соединение закрывается.

    вот рабочий скрипт курл

    Code:
    <?php
    $start_time = microtime(true); // Инициализация счётчика
    $proxies = file ("proxylist.txt"); //Список прокси
    $ualist = file('ua.txt'); //Список User Agent
    $url = ''; //Куда будем конектиться
    $header = array(); // Заголовок
    $header[] = 'Connection: keep-alive';
    $header[] = 'Cache-Control: max-age=0';
    $header[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
    $header[] = 'Accept-Encoding: gzip,deflate,sdch';
    $header[] = 'Accept-Language: ru,en-us;q=0.7,en;q=0.3';
    $header[] = 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7';
    $patternGET = '/=".{42}"/i';
    $patternPOST = array();
    $patternPOST[] = '/Ответ_1./i';
    $patternPOST[] = '/Ответ_2/i';
    	foreach($proxies as $num =>$file)
    { 
    	$ch = curl_init(); //Инициализируем запрос
    	$ua = trim($ualist[ array_rand($ualist) ]); //Рандомный User Agent
    	curl_setopt($ch, CURLOPT_URL, $url);
    	curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    	curl_setopt($ch,CURLOPT_USERAGENT, $ua); 
    	curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 10);
    	curl_setopt ($ch, CURLOPT_TIMEOUT, 20);
    	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    	$subjectGET = curl_exec($ch); // выполняем запрос curl и записываем результат html в переменную
    	preg_match($patternGET, $subjectGET, $matches, PREG_OFFSET_CAPTURE);
    	$string = $matches[0][0];
    	$rest = substr($string, 2, -1); //Получаем нужную для Пост запроса инфу
    
    	curl_setopt($ch, CURLOPT_POST, 1);
    	curl_setopt($ch, CURLOPT_POSTFIELDS, 'vk='.$rest);
    	curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 200);
    	curl_setopt ($ch, CURLOPT_TIMEOUT, 200);
    	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    	curl_setopt($ch, CURLOPT_PROXY, $file);
    	$subjectPOST = curl_exec($ch);
    	if (preg_match($patternPOST[0], $subjectPOST, $matches2, PREG_OFFSET_CAPTURE)){
    		print_r($matches2[0][0]."<br><br>");
    	}
    	elseif (preg_match($patternPOST[1], $subjectPOST, $matches2, PREG_OFFSET_CAPTURE)){
    		print_r($matches2[0][0]."<br><br>");
    	}
    	else {
    		echo "Что то пошло не так=(<br><br>";
    	}
    	curl_close($ch); //Закрываем соединение
     }
     $end_time = microtime(true);
    echo round(($end_time-$start_time),5)." сек";
    ?>
    
    а вот мульти курл

    Code:
        <?php
        $start_time = microtime(true); // Инициализация счётчика
        $proxies = file ("list.txt"); //Список прокси
        $ualist = file('ua.txt'); //Список User Agent
        $url = ''; //Куда будем конектиться
        $header = array(); // Заголовок
        $header[] = 'Connection: keep-alive';
        $header[] = 'Cache-Control: max-age=0';
        $header[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
        $header[] = 'Accept-Encoding: gzip,deflate,sdch';
        $header[] = 'Accept-Language: ru,en-us;q=0.7,en;q=0.3';
        $header[] = 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7';
        $patternGET = '/=".{42;}"/i';
        $patternPOST = array();
        $patternPOST[] = '/Ответ_1/i';
        $patternPOST[] = '/Ответ_2/i';
    
        $mc = curl_multi_init ();
        for ($thread_no = 0; $thread_no < count ($proxies); $thread_no++)
        {
        $c [$thread_no] = curl_init ();
        $ua = trim($ualist[ array_rand($ualist) ]); //Рандомный User Agent
        curl_setopt ($c [$thread_no], CURLOPT_URL, $url);
        curl_setopt ($c [$thread_no], CURLOPT_HEADER,$header);
        curl_setopt($c [$thread_no], CURLOPT_USERAGENT, $ua); 
        curl_setopt ($c [$thread_no], CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($c [$thread_no], CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt ($c [$thread_no], CURLOPT_TIMEOUT, 10);
        // curl_setopt ($c [$thread_no], CURLOPT_PROXY, trim ($proxies[$thread_no]));
        curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, 0);
        curl_multi_add_handle ($mc, $c [$thread_no]);
        }
        do {
        while ($done = curl_multi_info_read ($mc))
        {
        $info = curl_getinfo ($done ['handle']);
        $body = curl_multi_getcontent($done['handle']);
        preg_match($patternGET, $body, $matches, PREG_OFFSET_CAPTURE);
        $string = $matches[0][0];
        $rest = substr($string, 2, -1);
        print($rest."<br><br>");
            $ch = curl_init();
            $ua = trim($ualist[ array_rand($ualist) ]); //Рандомный User Agent
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
            curl_setopt($ch,CURLOPT_USERAGENT, $ua); 
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
            curl_setopt($ch, CURLOPT_TIMEOUT, 20);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, 'vk='.$rest);
            $subjectPOST = curl_exec($ch);
                if (preg_match($patternPOST[0], $subjectPOST, $matches2, PREG_OFFSET_CAPTURE)){
                print_r($matches2[0][0]."<br><br>");
            }
            elseif (preg_match($patternPOST[1], $subjectPOST, $matches2, PREG_OFFSET_CAPTURE)){
                print_r($matches2[0][0]."<br><br>");
            }
            else {
                echo "Что то пошло не так=(<br><br>";
            }
            curl_close($ch); //Закрываем соединение
        curl_multi_remove_handle ($mc, $done ['handle']);
        }
        while (($execrun = curl_multi_exec ($mc, $running)) == CURLM_CALL_MULTI_PERFORM);
        if ($execrun != CURLM_OK) break;
        } while ($running);
        curl_multi_close ($mc);
         $end_time = microtime(true);
        echo round(($end_time-$start_time),5)." сек";
        ?>
    
    Подскажите в чём проблема?
     
  3. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,546
    Likes Received:
    173
    Reputations:
    75
    проблема в том что это гавно код на который страшно смотреть, ты сначала попробуй что ни будь простое сделать на мультикурле а потом уже пихай своё условие.

    на вот тебе нормальный пример, с него и копай дальше

    PHP:
     for ($i 0$i count ($proxies); $i++)
        {
    $ch = array();
    $ch[$i] = curl_init();
    curl_setopt($ch[$i], CURLOPT_URL,"$query");
    curl_setopt($ch[$i], CURLOPT_HEADER0);
    curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER1);
    curl_setopt ($ch[$i], CURLOPT_PROXYtrim($proxies[i]));  
    }




     
    $mh curl_multi_init();

         
        foreach(
    $ch as $id => $c)
                {
    curl_multi_add_handle($mh,$ch[$id]);
    curl_multi_add_handle($mh,$ch[$id]);

    }
         
          
    $running null;
         
         do {
            
    curl_multi_exec($mh,$running);

         } while (
    $running 0);





    foreach(
    $ch as $id => $c)
                {

    $result[$id] = curl_multi_getcontent($c);
    curl_multi_remove_handle($mh$c);

    }



         

       
         
    curl_multi_close($mh);



    foreach(
    $result as $get_result) {

    // тут перебираешь результат и парсишь то что тебе нужно

    }
     
  4. GAiN

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

    Joined:
    2 Apr 2011
    Messages:
    2,531
    Likes Received:
    166
    Reputations:
    99
    Всем привет!
    как лучше реализовать определение четной недели?, если неделя начинается с четного числа и показывать один контент для четной недели, другой для нечетной
     
  5. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,546
    Likes Received:
    173
    Reputations:
    75

    PHP:
    <?
    $number_day date(w);
    $date date(j);


    if( 
    $number_day ) {

    $need_count_of_day = -($number_day 1);

    }elseif( 
    $number_day == )  {

    $need_count_of_day "0";

    }elseif( 
    $number_day )  {

    $need_count_of_day "-6";

    }




    if( 
    is_float((($date $need_count_of_day) / 2)) ) {

    echo 
    "неделя нечётная";

    }else{

    echo 
    "неделя чётная";

    }
    ?>
     
    1 person likes this.
  6. GAiN

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

    Joined:
    2 Apr 2011
    Messages:
    2,531
    Likes Received:
    166
    Reputations:
    99
    qaz, спасибо большое, проверил на локалхосте на месяца разные и на разные даты !
     
  7. -=Nikola=-

    -=Nikola=- New Member

    Joined:
    21 Oct 2011
    Messages:
    24
    Likes Received:
    3
    Reputations:
    0
    Привествую!
    Помогите решить проблему есть массив вида:
    Array
    (
    [id] => 11
    [text] => lolololo
    [name] => lalallaala
    )
    Array
    (
    [id] => 11
    [text] => lolololo
    [name] => lalallaala
    )
    Array
    (
    [id] => 12
    [text] => looooooo
    [name] => laaaaaaaaaa
    )

    необходимо массив прогнать и если id совпадают, то не дублировать а выдать один id с text, name

    В нашем случае выше, должно получится так:
    id = 11. text = lolololo. [name] => lalallaala
    id = 12. text = looooooo [name] => laaaaaaaaaa

    Короче избавиться от дулей надо.
     
  8. weInc

    weInc New Member

    Joined:
    29 Mar 2012
    Messages:
    40
    Likes Received:
    3
    Reputations:
    0
    Смешно конечно, но почему не хочет за место полей подкладывать переменную с полями..если напрямую заполнять переменную, то все норм, но когда вывод из другой таблицы - происходит это:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

    Code:
    $dc = mysql_query("SELECT category_rows from information_category");
    				while($category = mysql_fetch_assoc($dc)){
    					$catlist = $category['category_rows'];
    					$dt = mysql_query("SELECT ".$catlist." from information_title") or die(mysql_error());
    					
    				}
    
     
  9. ocheretko

    ocheretko Banned

    Joined:
    15 May 2010
    Messages:
    143
    Likes Received:
    51
    Reputations:
    116
    Сделайте
    PHP:
    echo $dt; exit();
    чтобы увидеть, что в запросе приводит к ошибке синтаксиса
     
  10. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,546
    Likes Received:
    173
    Reputations:
    75

    Code:
    $dc = mysql_query("SELECT `category_rows` from `information_category`");
    				while($category = mysql_fetch_assoc($dc)){
    					$catlist = $category['category_rows'];
    					$dt = mysql_query("SELECT `$catlist` from `information_title`") or die(mysql_error());
    					
    				}
    



    чёза набор слов?




    эт чё, двоимерный массив?


    PHP:
    <?

    $array2 = array(array
    (
        
    "id" => "11",
        
    "text" => "lolololo",
        
    "name" => "lalallaala"
    ),
    array
    (
        
    "id" => "11",
        
    "text" => "lolololo",
        
    "name" => "lalallaala"
    ),
    array
    (
        
    "id" => "12",
        
    "text" => "looooooo",
        
    "name" => "laaaaaaaaaa"
    ));



    $array_id = array();
    $clean_array = array();


    foreach( 
    $array2 as $str 

        {





    if( !
    in_array($str[id],$array_id)  )   

            {

    $array_id[] = $str[id];

    $clean_array[] = array("id" => $str['id'],"text" => $str['text'],"name" => $str['name']);

            }



        }






    print_r($clean_array);
    ?>
     
  11. weInc

    weInc New Member

    Joined:
    29 Mar 2012
    Messages:
    40
    Likes Received:
    3
    Reputations:
    0
    Вообщем не добавление кавычек, не вывод ошибки любым способом не решают проблему.
    $catlist имеет значение в виде "use,uac,uname" и все.
    Заполняя на прямую без вывода из базы все работает...
    В чем же причина..
     
  12. ocheretko

    ocheretko Banned

    Joined:
    15 May 2010
    Messages:
    143
    Likes Received:
    51
    Reputations:
    116
    Сделайте echo $dt из скрипта, и скопируйте вывод сюда
     
  13. weInc

    weInc New Member

    Joined:
    29 Mar 2012
    Messages:
    40
    Likes Received:
    3
    Reputations:
    0
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
     
  14. GAiN

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

    Joined:
    2 Apr 2011
    Messages:
    2,531
    Likes Received:
    166
    Reputations:
    99
    можно ли с помощью php определить разрешение экрана ?
     
  15. weInc

    weInc New Member

    Joined:
    29 Mar 2012
    Messages:
    40
    Likes Received:
    3
    Reputations:
    0
    Вообщем решил проблему, хотя так и не понял в чем она заключалась.
    Добавляя дополнительный знак в поле, а потом просто удаляя последний элемент все работало, хотя в данных изменений не происходило..
     
  16. mironich

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

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    Нет, но можно с помощью js.
     
  17. weInc

    weInc New Member

    Joined:
    29 Mar 2012
    Messages:
    40
    Likes Received:
    3
    Reputations:
    0
    Ну а если произвдить какие то хитрые мохинации с библиотекой для работы с изображениями, незнаю..пиксели там считать, может что получится)
    Но лучше конечно искользовать готовый метод в js)
     
  18. Scofild

    Scofild Member

    Joined:
    26 Jun 2007
    Messages:
    29
    Likes Received:
    43
    Reputations:
    0
    Помогите разобраться, вот есть форма обратной связи с записью в текстовый файл

    PHP:
    <?php
    $name 
    $_POST['name']; 
    $mail $_POST['mail'];
    $message $_POST['message'];

    $text .= "\nИмя: $name \n"
    $text .= "Почта: $mail \n"
    $text .= "Сообщение: $message \n"

    if (isset(
    $_POST['name'])) { $login $_POST['name']; if ($login == '') { unset($name);} }

        {
        
    $text ="\n\n---------------------\n" $text;
        
    $file fopen ("file.txt""a+"); 
        
    fwrite ($file,$text); 
        
    fclose ($file); 
        }
    ?>



    <form action="/feed.php" method="POST">

    <b>Имя:</b> <input type="text" name="name"  value="">
    <b>e-mail:</b> <input type="text" name="mail"  value="">

    <b>Сообщение:</b>
    <textarea  name="message" rows="10" cols="20">
    </textarea>

    <input type="submit" name="submit" value="Отправить">
    </form>


    feed.php - это страница с формой
    Получается когда на страницу с формой заходишь, он сразу записывает в файл пустое сообщение. Как сделать чтобы скрипт записывал только по нажатию на кнопку? И чтобы на этой же странице появлялось сообщение что всё отправлено.
     
  19. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Scofild
    PHP:
    if (isset($_POST['name'])) { 
        
    $login $_POST['name']; 
        if (
    $login == '') { unset($name);}
        
    $text ="\n\n---------------------\n" $text;
        
    $file fopen ("file.txt""a+"); 
        
    fwrite ($file,$text); 
        
    fclose ($file); 
        } 
     
    _________________________
  20. antras2007

    antras2007 New Member

    Joined:
    4 Jul 2013
    Messages:
    33
    Likes Received:
    0
    Reputations:
    0
    Доброго времени суток вам! Изучаю PHP самостоятельно, поэтому не у кого спросить. Подскажите пожалуйста почему при первом входе на страницу содержащую форму выдает ошибку:

    Notice: Undefined index: rows in D:\cod\test\self\table_self.php on line 7

    Notice: Undefined index: cols in D:\cod\test\self\table_self.php on line 8
    но код работает как надо. При вводе данных и при следующих обновлениях страницы эти ошибки больше не выводятся до того времени пока заново не введешь адрес в браузер.

    вот код:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
    <head>
    <title>Таблица умножения</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    </head>
    <body>
    <h1>Таблица умножения</h1>
    <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
    <input type="text" name="rows">
    <input type="text" name="cols">
    <input type="submit" name="submit" value="Умножить">
    </form>


    <?php
    $rows = trim(strip_tags($_POST['rows']));
    $cols = trim(strip_tags($_POST['cols']));
    echo "<p>";
    echo "<table border='1' align='center'>";
    for($tr=1; $tr<=$rows; $tr++){
    echo "<tr>";
    for($td=1; $td<=$cols; $td++){
    if($tr==1 or $td==1)
    echo "<th style='background: red'>".$tr*$td."</th>";
    else
    echo "<td style='background: yellow'>".$tr*$td."</td>";
    }
    echo "</tr>";
    }
    echo "</p>";
    echo "</table>";
    ?>
    </body>
    </html>
     
Thread Status:
Not open for further replies.