php调用脚本或者系统函数

都知道调用系统函数式exec或者system这两个方法,至于其他的我还不知道,学识有限。

至于这两个函数个人喜好,我觉得没什么区别,不过建议调用系统函数使用system,调用脚本什么使用exec至于为什么,只是个人按单词字面理解,

今天说的是exec,刚好项目使用的抓取,前面用php curl方式,但是老长了,维护起来也是特纠结。有python这么好的抓取利器不能浪费了,反正centos里面自带不是

exec调用方法

exec('python ' . dirname(dirname(__FILE__)). '/\python2/\getPay.py "' . $id . '" '.$url, $array, $ret);

这个是带了两位参数,$array是返回值,$ret是执行状态,如果python报没有找到,这时候$ret报的好像是127吧,可能你是docker环境,会遇到这个问题,应为你当前容器并不具备python只是系统底层具备

所以你可以有两种方式解决,curl方式单独开一个容器,这个容器也有php环境和python环境。在配置映射目录建一个php文件,调用通过curl端口加上这个新建的php文件,就好


还有一个这个新建文件调用返回数据大都是echo json_encode($data);这样的吧!注意这样curl抓取的bom头,你直接json_decode($output);是解析不出来的

 $postData=array('pythontype'=>'getPay','id'=>$id,'url'=>$url);
           // $url = "";
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, 'https://172.0.0.1/getpython.php');
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// post数据
            curl_setopt($ch, CURLOPT_POST, 1);
// post的变量
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
            $output = curl_exec($ch);
            curl_close($ch);

if(preg_match('/^\xEF\xBB\xBF/',$output)){
    $output = substr($output,3);
}
$output = json_decode(trim($output),true);

差不多就是这样的了,这样做也有一个不好处就是端口暴露在外面,那就改成智能内部服务调用就好curl地址改一下就ok.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值