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

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

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

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

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    если честно- я ничего непонял область применения что хочеш, опиши подробнее- вернусь- попробую помоч если пойму что требуеться
    и прекращайте пользоваться count намного проще организовываеться цикл до тех пор пока в файле невстретиться конец файла ну типа такого while(!feof($k))
     
    #13461 Kusto, 8 Jan 2010
    Last edited: 8 Jan 2010
  2. admink1

    admink1 Member

    Joined:
    12 Jun 2009
    Messages:
    63
    Likes Received:
    21
    Reputations:
    1

    есть текстовик со следующим содержимым:
    1
    2
    3
    4
    5
    6
    ..etc

    мне нужно чтоб заходил в текстовик выдергивал первую строчку(то есть цифру 1) и заходил по ссылке, допустим ttp://vkontakte.ru/id1 , потом брал вторую строчку(цифру 2), заходил на ttp://vkontakte.ru/id2, потом заходил ttp://vkontakte.ru/id3 и здесь цикл заканичвал свою работу и начинает работать другой цикл, ну после того как вновь вернемся к нашему циклу он выполнил ту же операцию, но уже начиная с четвертой строчкой(цифра 4), то есть совершил по очереди переходы:
    ttp://vkontakte.ru/id4
    ttp://vkontakte.ru/id5
    ttp://vkontakte.ru/id6
    и закончил свою работу.
     
  3. Maxxxtri23

    Maxxxtri23 New Member

    Joined:
    20 Dec 2008
    Messages:
    76
    Likes Received:
    1
    Reputations:
    0
    PHP:
    <?php

        $port 
    10001;
        
        
    // create a streaming socket, of type TCP/IP
        
    $sock socket_create(AF_INETSOCK_STREAMSOL_TCP);
        
        
    // set the option to reuse the port
        
    socket_set_option($sockSOL_SOCKETSO_REUSEADDR1);
        
        
    // "bind" the socket to the address to "localhost", on port $port
        // so this means that all connections on this port are now our resposibility to send/recv data, disconnect, etc..
        
    socket_bind($sock0$port);
        
        
    // start listen for connections
        
    socket_listen($sock);

        
    // create a list of all the clients that will be connected to us..
        // add the listening socket to this list
        
    $clients = array($sock);
        
        while (
    true) {
            
    // create a copy, so $clients doesn't get modified by socket_select()
            
    $read $clients;
            
            
    // get a list of all the clients that have data to be read from
            // if there are no clients with data, go to next iteration
            
    if (socket_select($read$write NULL$except NULL0) < 1)
                continue;
            
            
    // check if there is a client trying to connect
            
    if (in_array($sock$read)) {
                
    // accept the client, and add him to the $clients array
                
    $clients[] = $newsock socket_accept($sock);
                
                
    // send the client a welcome message
                
    socket_write($newsock"Hello, this is welcome message\n".
                
    "There are ".(count($clients) - 1)." client(s) connected to the server\n");
                
                
    socket_getpeername($newsock$ip);
                echo 
    "New client connected: {$ip}\n";
                
                
    // remove the listening socket from the clients-with-data array
                
    $key array_search($sock$read);
                unset(
    $read[$key]);
            }
            
            
    // loop through all the clients that have data to read from
            
    foreach ($read as $read_sock) {
                
    // read until newline or 1024 bytes
                // socket_read while show errors when the client is disconnected, so silence the error messages
                
    $data = @socket_read($read_sock1024PHP_NORMAL_READ);
                
                
    // check if the client is disconnected
                
    if ($data === false) {
                    
    // remove client for $clients array
                    
    $key array_search($read_sock$clients);
                    unset(
    $clients[$key]);
                    echo 
    "client disconnected.\n";
                    
    // continue to the next client to read from, if any
                    
    continue;
                }
                
                
    // trim off the trailing/beginning white spaces
                
    $data trim($data);
                
                
    // check if there is any data after trimming off the spaces
                
    if (!empty($data)) {
                
                    
    // send this to all the clients in the $clients array (except the first one, which is a listening socket)
                    
    foreach ($clients as $send_sock) {
                    
                        
    // if its the listening sock or the client that we got the message from, go to the next one in the list
                        
    if ($send_sock == $sock || $send_sock == $read_sock){
                            
    //continue;
                            
    if ($data == 'shutdown') {             
                            
    socket_write($send_sock"Ololo"."\n");
                            }
                        
                        }
                        
    // write the message to the client -- add a newline character to the end of the message
                        //socket_write($send_sock, $data."\n");
                        //echo($data."\n");
                        
                    
    // end of broadcast foreach
                  
    echo($data."\n");  
                 
    // if ($data == 'shutdown') {             
                 // socket_write($send_sock, "Ololo"."\n");
                  //}
                
    }
                
            } 
    // end of reading foreach
        
    }

        
    // close the listening socket
        
    socket_close($sock);
    ?>
    Почему если я с какого либо клиента отсылаю shutdown, то пишет:
    Code:
    Warning: socket_write(): unable to write to socket [0]: ╟ряЁюё эр юЄяЁртъє шыш я
    юыєўхэшх фрээ√ї  (when sending on a datagram socket using a sendto call) no addr
    ess was supplied.
     in D:\xampp\htdocs\test2.php on line 77
    Однако сообщение Ololo приходит. Мне надо чтобы я с 1 клиента отсылал например сообщение shutdown, а скрипт мне в ответ слал Ololo, т.е. чтобы Ololo приходило тому клиенту кто отсылает скрипту shutdown и только ему.
    P.S. выручайте новичка, с меня +
    Если надо, то вот оригинальный скрипт:
    PHP:
    <?php

        $port 
    9050;
        
        
    // create a streaming socket, of type TCP/IP
        
    $sock socket_create(AF_INETSOCK_STREAMSOL_TCP);
        
        
    // set the option to reuse the port
        
    socket_set_option($sockSOL_SOCKETSO_REUSEADDR1);
        
        
    // "bind" the socket to the address to "localhost", on port $port
        // so this means that all connections on this port are now our resposibility to send/recv data, disconnect, etc..
        
    socket_bind($sock0$port);
        
        
    // start listen for connections
        
    socket_listen($sock);

        
    // create a list of all the clients that will be connected to us..
        // add the listening socket to this list
        
    $clients = array($sock);
        
        while (
    true) {
            
    // create a copy, so $clients doesn't get modified by socket_select()
            
    $read $clients;
            
            
    // get a list of all the clients that have data to be read from
            // if there are no clients with data, go to next iteration
            
    if (socket_select($read$write NULL$except NULL0) < 1)
                continue;
            
            
    // check if there is a client trying to connect
            
    if (in_array($sock$read)) {
                
    // accept the client, and add him to the $clients array
                
    $clients[] = $newsock socket_accept($sock);
                
                
    // send the client a welcome message
                
    socket_write($newsock"no noobs, but ill make an exception :)\n".
                
    "There are ".(count($clients) - 1)." client(s) connected to the server\n");
                
                
    socket_getpeername($newsock$ip);
                echo 
    "New client connected: {$ip}\n";
                
                
    // remove the listening socket from the clients-with-data array
                
    $key array_search($sock$read);
                unset(
    $read[$key]);
            }
            
            
    // loop through all the clients that have data to read from
            
    foreach ($read as $read_sock) {
                
    // read until newline or 1024 bytes
                // socket_read while show errors when the client is disconnected, so silence the error messages
                
    $data = @socket_read($read_sock1024PHP_NORMAL_READ);
                
                
    // check if the client is disconnected
                
    if ($data === false) {
                    
    // remove client for $clients array
                    
    $key array_search($read_sock$clients);
                    unset(
    $clients[$key]);
                    echo 
    "client disconnected.\n";
                    
    // continue to the next client to read from, if any
                    
    continue;
                }
                
                
    // trim off the trailing/beginning white spaces
                
    $data trim($data);
                
                
    // check if there is any data after trimming off the spaces
                
    if (!empty($data)) {
                
                    
    // send this to all the clients in the $clients array (except the first one, which is a listening socket)
                    
    foreach ($clients as $send_sock) {
                    
                        
    // if its the listening sock or the client that we got the message from, go to the next one in the list
                        
    if ($send_sock == $sock || $send_sock == $read_sock)
                            continue;
                        
                        
    // write the message to the client -- add a newline character to the end of the message
                        
    socket_write($send_sock$data."\n");
                        
                    } 
    // end of broadcast foreach
                    
                
    }
                
            } 
    // end of reading foreach
        
    }

        
    // close the listening socket
        
    socket_close($sock);
    ?>
     
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Maxxxtri23 Все ж подписано и каждая строчка прокомментирована >.<

    Проблема тут: if ($send_sock == $sock || $send_sock == $read_sock) Скрипт просматривает все сокеты из массива и ищет два: сокет, который принимает новых пользователей и собственно отправителя текущего сообщения. Условия следует разделить - сокет для принятия всегда пропускать. А отправителю слать соответствующее сообщение
    PHP:
    if ($send_sock $sock) continue;
    if (
    $send_sock $read_socksocket_write($send_sock"olololo\n");
    Kusto Накладные расходы (памяти/процессора) на подсчет количества элементов в массиве - меньше (естественно, если не загонять подсчет в условие окончания цикла), чем использование foreach

    admink1 Либо вы несете чушь и сами не понимаете чего хотите, либо не формулируете до конца задачу. Зачем использовать вложенные циклы, если можно последовательно считывать и обращаться к соответствующим страницам? В чем принципиальная важность второго цикла?
     
    _________________________
    #13464 Gifts, 8 Jan 2010
    Last edited: 8 Jan 2010
  5. Kusto

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

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    так в чем проблемма? то-же самое практически
    PHP:
    <?php 
    $k 
    file('name.txt');
    $a=array_chunk($k,3); 
    foreach (
    $a as $c => $d){
    echo 
    " </br>цикл работает $c -ый раз : </br></br>"
    foreach (
    $d as $f) echo "  суперссылкавконтакта и id=$f   </br>  "
      

    ?>
    вот результат его работы

    цикл работает 0 -ый раз :

    суперссылкавконтакта и id= 25
    суперссылкавконтакта и id=456
    суперссылкавконтакта и id=789

    цикл работает 1 -ый раз :

    суперссылкавконтакта и id=425
    суперссылкавконтакта и id=456
    суперссылкавконтакта и id=7851

    цикл работает 2 -ый раз :

    суперссылкавконтакта и id=54698
    суперссылкавконтакта и id=52145
    суперссылкавконтакта и id=25469

    цикл работает 3 -ый раз :

    суперссылкавконтакта и id=58742
    суперссылкавконтакта и id=87542
    суперссылкавконтакта и id=12458

    цикл работает 4 -ый раз :

    суперссылкавконтакта и id=12458
     
    #13465 Kusto, 8 Jan 2010
    Last edited: 8 Jan 2010
    1 person likes this.
  6. admink1

    admink1 Member

    Joined:
    12 Jun 2009
    Messages:
    63
    Likes Received:
    21
    Reputations:
    1

    полная задача такова:
    1. нужно выдернуть акк из файла.
    2. залогиниться.
    3. выдернуть из другого текстовика три первые ссылки(1,2,3 строчки)
    4. по очереди пройтись по этим трем ссылкам и написать текст.
    5. поменять акк
    6. залогинится
    7. и вновь выдернть из текстовика три последующие ссылки(4,5,6 строчки) и написать текст.

    //сделал все , кроме 7ого пункта, получается что всегда по всему файлу проходится, а как хотелось бы не получается :(
     
  7. REBUUS

    REBUUS Active Member

    Joined:
    6 Apr 2009
    Messages:
    314
    Likes Received:
    111
    Reputations:
    9
    PHP:
    <object width="425" height="344">
    <
    param name="movie" value="http://www.youtube.com/v/1bOqXOTYeh8&hl=ru_RU&fs=1&rel=0"></param>
    <
    param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
    <
    embed src="http://www.youtube.com/v/1bOqXOTYeh8&hl=ru_RU&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed>
    </
    object>
    а вариант не перегружая страницу видео из ютуб менять при нажатие на ссылку скриптом ява или пхп , какой ни будь функцией, на пример:
    <a href="domen/video/" onClick="video(url);"> ссылка</a>


    фотки могу так менять , а вот с видео проблемка :mad:
     
    #13467 REBUUS, 9 Jan 2010
    Last edited: 9 Jan 2010
  8. Kusto

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

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    сразу говорю этот скрипт я не проверял- но в таком виде должно пахать (как я понял у тя два текста в одном логины и пароли в другом айди)
    PHP:
    <?php  
    $k 
    file('id.txt'); 
    $xfile('name.txt'); 
    $a=array_chunk($k,3);  
    foreach (
    $a as $c => $d){ 
    echo 
    " </br> $x[$c] дернули первый акк и залогинились</br></br>";  
    foreach (
    $d as $f) echo "  суперссылкавконтакта и id=$f   </br>  ";  
       
    }
    ?>
    там где строчка
    PHP:
    echo " </br> $x[$c] дернули первый акк и залогинились</br></br>"
    можеш вставлять людые действия (логиниться, и т д)
    а в этой строчке
    PHP:
    foreach ($d as $f) echo "  суперссылкавконтакта и id=$f   </br>  ";  
    отправляй сообщения и т д)
    И дай ответ работает или нет? (и пускай тебя foreach несмущает- внутри него тоже можно производить любые операции как в любом- другом цикле)

    Я непойму что тебя смущало в предыдущих вариантах- практически они все были рабочие просто я по мере твоих обьяснений добавлял все новое и новое, лично я как бы сделал
    - составил функцию и внутри циклов бы ее вызывал, я вообще невижу никаких проблемм (непойму что тебя смущает в предложенныхвариантах)
     
    #13468 Kusto, 9 Jan 2010
    Last edited: 9 Jan 2010
  9. admink1

    admink1 Member

    Joined:
    12 Jun 2009
    Messages:
    63
    Likes Received:
    21
    Reputations:
    1
    не я так пробовал уже ;)
    если имеется текстовик со следующим содержанием:
    Code:
    1
    2
    3
    4
    5
    6
    ..
    
    что он делает,
    1) он логинится все норм,
    2) потом выдергивает 3 строчку, заходит по ссылки, потом выдергивает 6 строчку, 9, 12 и так далее, до конца файла.
    3) до кончца файла доходит, меняет акк, потом с другим акком проходит, тоже самое делает, то есть проходится по 3 строчке, 6, 9, и так пока конец файла не найдет.

    а нужно, чтоб первый акк прошелся по первым трем ссылкам, второй акк по 4-6 ссылке, и так далее ;)
     
  10. Kusto

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

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    как он может использовать один ак если
    PHP:
    $x[$c]
    вызывает из списка совершенно другой акк (с которым и проходит по 3 ссылкам)- 3 ссылки прошло- дергает другой акк и т д (или те не такое надо?)

    вот именно= первый акк проходит по первым трем- второй по 4,5,6 (см скрипт выше)
     
  11. admink1

    admink1 Member

    Joined:
    12 Jun 2009
    Messages:
    63
    Likes Received:
    21
    Reputations:
    1
    не, я не говорил, что он 1 акк использует. акки норм меняются, по очереди.
    а вот переход по ссылкам идет так - 3строчку дергает, 6, 9 :(
     
  12. Kusto

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

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    все работает я там просто "{"пропустил

    вот скрипт(на денвере проверил)
    PHP:
    <?php   
    $k 
    file('id.txt');  
    $xfile('name.txt');  
    $a=array_chunk($k,3);   
    foreach (
    $a as $c => $d){  
    echo 
    " </br> $x[$c] дернули первый акк и залогинились</br></br>";   
    foreach (
    $d as $f) echo "  суперссылкавконтакта и id=$f   </br>  ";   
        
    }
    ?>
    а вот результат его работы

    Vasya дернули первый акк и залогинились

    суперссылкавконтакта и id=1
    суперссылкавконтакта и id=2
    суперссылкавконтакта и id=3

    petya дернули первый акк и залогинились

    суперссылкавконтакта и id=4
    суперссылкавконтакта и id=5
    суперссылкавконтакта и id=6

    misha дернули первый акк и залогинились

    суперссылкавконтакта и id=7
    суперссылкавконтакта и id=8
    суперссылкавконтакта и id=9

    grisha дернули первый акк и залогинились

    суперссылкавконтакта и id=10
    суперссылкавконтакта и id=11
    суперссылкавконтакта и id=12


    как видеш проходиться каждый акк и по всему списку
     
    1 person likes this.
  13. admink1

    admink1 Member

    Joined:
    12 Jun 2009
    Messages:
    63
    Likes Received:
    21
    Reputations:
    1
    Code:
    а вот результат его работы
    
    Vasya дернули первый акк и залогинились
    
    суперссылкавконтакта и id=1 
    суперссылкавконтакта и id=2 
    суперссылкавконтакта и id=3 
    
    petya дернули первый акк и залогинились
    
    суперссылкавконтакта и id=4 
    суперссылкавконтакта и id=5 
    суперссылкавконтакта и id=6 
    
    misha дернули первый акк и залогинились
    
    суперссылкавконтакта и id=7 
    суперссылкавконтакта и id=8 
    суперссылкавконтакта и id=9 
    
    grisha дернули первый акк и залогинились
    
    суперссылкавконтакта и id=10 
    суперссылкавконтакта и id=11 
    суперссылкавконтакта и id=12
    
    
    но почему то он переходит только по 3им ссылкам, а именно:
    суперссылкавконтакта и id=3
    суперссылкавконтакта и id=6
    суперссылкавконтакта и id=9
    суперссылкавконтакта и id=12

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

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    admink1 Потому что руки крюки. Русским языком было сказано - заменить echo " суперссылкавконтакта и id=$f </br> "; на свою функцию. Или следует использовать операторные скобки:

    PHP:
    foreach ($d as $f
    // <<<---- фигурная скобка, сразу после foreach
    echo "  суперссылкавконтакта и id=$f   </br>  "
    echo 
    'еще одна команда';
    echo 
    'еще другая команда';  
    // <<<---- закрывается
    Вы вообще мануал открывали? Или уже какером себя считаете и вам не надо?

    Kusto а вам надо по рукам линейкой себе бить. Вы бы еще через обфускатор переменные пропустили, чтобы человек еще лучше понял, что означают эти однобуквенные переменные
     
    _________________________
    #13474 Gifts, 9 Jan 2010
    Last edited: 9 Jan 2010
    1 person likes this.
  15. oldsys

    oldsys Member

    Joined:
    4 Jan 2010
    Messages:
    31
    Likes Received:
    5
    Reputations:
    0
    Не знаю куда обратится ! Но проблема моя состоит в том что после установки Outpost я не могу открывать множество ссылок в программе Опера ! Выдается вот такая Ошибка !

    Невозможно подключиться к прокси-серверу. Доступ запрещён

    Вы попытались получить доступ к адресу http://forum.antichat.ru/, который сейчас недоступен. Убедитесь, что веб-адрес (URL) введен правильно, и попытайтесь перезагрузить страницу.
    Убедитесь, что соединение с Интернет активно, и проверьте, работают ли другие приложения, использующие это соединение.

    что делать подскажите ! О_о
     
  16. suser

    suser Member

    Joined:
    30 Dec 2009
    Messages:
    35
    Likes Received:
    5
    Reputations:
    0
    А в опере прокси нету нерабочего?
     
  17. Komyak

    Komyak Banned

    Joined:
    14 Jan 2009
    Messages:
    202
    Likes Received:
    18
    Reputations:
    1
    Подскажите, как можно 4-5 изображений соединить в одно?
    Есть капча, которая состоит из 5 отдельных картинок. Вид урла
    Code:
    &p=1
    &p=2
    &p=3
    &p=4
    &p=5
    
    Отсылать на распознование по одной картинке нет смысла, а как ещё реализовать не представляю.
     
  18. Kusto

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

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    обрати внимание на эту страницу и сравни со своим курлом (там два варианта для яндекса) походу дела в курле недостаточно данных- вот и ждет ответ и время ожидания заканчиваеться (так вроде в ошибке написанно у тебя)
    http://forum.antichat.ru/threadnav40896-1422-10.html
     
  19. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    curl_setopt($ch, CURLOPT_TIMEOUT, 3); Выставь больше, у тебя видимо слабый канал, поставь 10.
     
  20. Kusto

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

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    значит надо снифать что запрашивает сервак (прописывает ли кукисы, инфо по браузеру, рефер откуда идет и т д) и из этих данных уже плясать (я даже непредставляю как можно что то отправить на сайт если он не запрашивает у тебя этих данных)
     
Thread Status:
Not open for further replies.