作者wild0921 (我要幸福)
看板PHP
標題Re: [請益]自動執行網頁php
時間Mon Jan 12 17:57:16 2015
※ 引述《wild0921 (我要幸福)》之銘言:
: ※ 引述《GALINE (天真可愛CQD)》之銘言:
: : 感覺像是你想做這樣的事情
: : - 從 DB (或什麼地方)撈出 100 個 URL
: : - 同時戳他們,你不需要管回應資料,只想快點戳完(所以想要多執行序)
: : 其實你有主機實體權限的話,可以用 command line + php 幹一些事情。像是:
: : ----------------------------------------------
: : <?php
: : $urls = getAllURL(); // 看你原本怎麼撈出 100 個 URL
: : foreach ($urls as $url) {
: : popen("curl {$url} > /dev/null 2> /dev/null", 'r');
: : }
: : ----------------------------------------------
: : popen() 執行的指令會跟 PHP 分不同的 process 平行跑完。不過 PHP 會等他們都跑完
: : 之後才結束
: : 如果有需要把回應存下來,那麼把指令改成
: : "curl {$url} > /檔案/的/路徑 2>/dev/null"
: : 就可以了
: : 不需要把 lynx 扛出來跑 Javascript...
: TO GALINE YES~~~我的確是想要這樣做沒有錯
: 我剛剛嘗試著用你上面的語法, popen有執行,但是變數帶不過去 T_T
: 使用的$url有帶三個變數, 但是對方網頁回覆error 找不到第二個變數
: 於是乎我把, $url撈出來手動貼到網頁上面執行, 變數有傳過去, 有實現
: 但是我在curl接學網站上面看說get 可以直接接在網址後面即可實現, 真是詭異
嗯....解決了我的問題, 所以上來分享一下如何解決
popen("curl {$url} > /dev/null 2> /dev/null", 'r');
少了一個 1, 我沒有故意要噹的意思, 只是後來才發現是這問題, 想說分享一下,
>> popen("curl {$url} 1> /dev/null 2> /dev/null", 'r');
用法:
1 如果沒有error要在哪裡顯示
2 如果error要在哪裡顯示
附加一個 沒有提到, 但有可能會用到的東西 "&"
popen("curl {$url} 1> /dev/null 2> /dev/null &", 'r');
&主要是在背景執行
參考網址:
http://bbs.csdn.net/topics/10438612
另外curl 在 command line 會有參數的值有編碼問題
一般在瀏覽器上面都會自動完成, 在是如果再linux上面就不會自動完成
所以要把帶過去的參數先用urlencode()包起來, 再丟過去
我還在研究位蝦咪丟過去之後, 不用urldecode()就可以直接用
以上
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.251.45.236
※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1421056644.A.82C.html
推 ChenCH1986: 推分享 01/13 15:53
推 GALINE: 1> 跟 > 其實是同一件事情,沒有指定的話預設會用 stdout 01/13 22:33
→ GALINE: 然後兇手其實是&,被當成背景執行所以攔不到 stdio[汗] 01/13 22:34
→ GALINE: 就好了,加個單引號這樣 01/13 22:35
→ GALINE: 一下沒想到要塞 query string 就忘了這事[汗] 01/13 22:35
→ GALINE: urlencode()會動其實是歪打正著..&會被跳掉,然後server端 01/13 22:36
→ GALINE: 又自動把urlencode 過的 query string 轉回來... 01/13 22:37