我试图为WordPress创建一个插件,该插件需要在代码的某个位置向我的服务器发送一些信息。该插件将安装在多个服务器中,具有不同的配置和功能。
我喜欢做的是使该脚本能够在任何类型的PHP配置和服务器功能中与我的服务器通信(只是调用我的服务器的特定URL)。
这是我的代码:
ini_set("allow_url_fopen", 1);
$d = array('key1' => 'val1', 'key2' => 'val2');
$data = urlencode(serialize($d));
$f = fopen('http://www.my-site.ext/getdata/' . $data . '/', 'r');
if(!$f)
{
$ch = curl_init();
if($ch != false)
{
curl_setopt($ch, CURLOPT_URL, 'http://www.my-site.ext/getdata/' . $data . '/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec ($ch);
curl_close ($ch);
}
else
{
// IS THERE ANY OTHER METHOD TO TEST IN CASE
// THE FOPEN AND THE CURL NOT WORK ?
}
}
else
{
fclose($f);
}
所以问题是,如果fopen和cURL在特定主机上不起作用,我可以尝试其他方法吗?
您可以使用file_get_contents()
,因为它仍然发送get请求。然而,fopen
和fsockopen
仍然需要启用allow_url_fopen
。
如果服务器上启用了安全模式,您就不可能进行任何网络事务。每次使用getcontents时,都会在调用后使用unset()
来释放资源,这样就不会妨碍性能。
您可以通过fsockopen手动处理请求,并编写一个基本的HTTP 1.0客户端来执行请求,但如果禁用了fopen url包装器,您可能会发现fsockopen也被禁用。