我正在尝试使用curl在我的centOs7共享服务器中运行本地php文件,但是我无法对本地文件使用curl方法。 这是我的示例文件:
--bg/
------back.php
------curl.php
这是curl.php代码:
<?php
function run_curl($data){
//url-ify the data for the POST
$fields_string = '';
//foreach($data as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
$fields_string = http_build_query($data);
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
//curl_setopt($ch, CURLOPT_HTTPHEADER, ['Accept: ' . $content_type]);
curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json'
)
);
curl_setopt($ch,CURLOPT_URL,'https://taskdan.com/bg/back.php');
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,50); # timeout after 10 seconds, you can increase it
//curl_setopt($ch,CURLOPT_HEADER,false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); # Set curl to return the data instead of printing it to the browser.
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); # Some server may refuse your request if you dont pass user agent
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//execute post
$result = curl_exec($ch);
//print_r($result);
//print_r((curl_getinfo($ch)));
//error_log($result);
//close connection
curl_close($ch);
return ($result);
}
echo " Output : </br>";
echo run_curl( [
"ab" => "test"
]);
?>
以及下面的back.php代码:
<?php
header("Content-Type:application/json");
echo json_encode([
"a" => "test"
])
?>
当我运行此代码时,它似乎将我的域名转换为服务器的公共IP地址。 Curl在服务器脚本之外的其他环境下都可以正常工作。
当我使用SSH运行curl时,我得到了:
[root@??? ~]# curl https://taskdan.com -k
<html>Apache is functioning normally</html>
[root@??? ~]# curl http://171.22.27.118 -k
<html>Apache is functioning normally</html>
我想在后台运行一些脚本,有没有办法通过CURL运行带有POST参数的本地php文件?
答案 0 :(得分:1)
您确定您的Apache虚拟主机已配置为在所有接口上进行侦听吗? 当您对/ etc / hosts中配置为127.0.0.1的域进行DNS查找时,请求将被指向回送接口。 打开您的虚拟主机配置并搜索:
<VirtualHost ...>
如果配置为
<VirtualHost 171.22.27.118:80>
将其更改为
<VirtualHost *:80>
..然后重试
如果由于任何原因而无法编辑VirtualHost定义,则可以指示cURL在特定地址/端口上发出请求并设置正确的Host标头:
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Host: taskdan.com'
)
);
curl_setopt($ch,CURLOPT_URL,'https://171.22.27.118/bg/back.php');
这可以帮助缓解问题,但不能保证能正常工作,因为问题是Web服务器配置本身不是源代码。
答案 1 :(得分:1)
您的/etc/hosts
文件应如下所示:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
将其更改为以下形式:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 taskdan.com
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 taskdan.com
或者,只需更改您的代码即可。
curl_setopt($ch,CURLOPT_URL,'http://127.0.0.1/bg/back.php');
并相应地配置Apache。