作者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://webptt.com/cn.aspx?n=bbs/PHP/M.1421056644.A.82C.html
1F:推 ChenCH1986: 推分享 01/13 15:53
2F:推 GALINE: 1> 跟 > 其实是同一件事情,没有指定的话预设会用 stdout 01/13 22:33
3F:→ GALINE: 然後凶手其实是&,被当成背景执行所以拦不到 stdio[汗] 01/13 22:34
5F:→ GALINE: 就好了,加个单引号这样 01/13 22:35
6F:→ GALINE: 一下没想到要塞 query string 就忘了这事[汗] 01/13 22:35
7F:→ GALINE: urlencode()会动其实是歪打正着..&会被跳掉,然後server端 01/13 22:36
8F:→ GALINE: 又自动把urlencode 过的 query string 转回来... 01/13 22:37