设置safe_mode ON和open_basedir时发送基本HTTP POST

时间:2014-04-26 10:38:41

标签: php curl

我尝试运行服务器配置safe_mode: ONopen_basedir option is set的基本cURL POST(下面)。我的托管服务提供商表示这是出于安全目的,我的代码必须在下面的PHP 5.2版本中运行(他们的版本是PHP 5.4)。到目前为止,当我运行代码时,它始终返回数组而没有任何参数。是否有另一种方法可以有效地将数据发布到这样的远程服务器。感谢。

simplepost.php (在localhost中)

<?php
//
// A very simple PHP example that sends a HTTP POST to a remote site
//

$ch = curl_init();

// basic cURL option
curl_setopt($ch, CURLOPT_URL,"http://voulsa.qwords.org/test.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
        "number=12345&status=SUCCESS&msg=OK");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// receive return value from remote server
$html = curl_exec($ch);
curl_close($ch);
echo($html);
?>

test.php (在远程网站中)

<?php
print_r($_POST);
?>

1 个答案:

答案 0 :(得分:0)

问题是您的网站正在返回HTTP 301响应,重定向

http://voulsa.qwords.org/test.php

http://www.voulsa.qwords.org/test.php

回复是

HTTP/1.1 301 Moved Permanently
Date: Sat, 26 Apr 2014 11:22:12 GMT
Server: Apache
Location: http://www.voulsa.qwords.org/test.php
Content-Length: 245
Content-Type: text/html; charset=iso-8859-1

现在,如果您可以启用CURLOPT_FOLLOWLOCATION设置,这将不会出现问题,但由于您的托管公司的限制,您不能这样做。

最简单的解决方法是直接查询www.voulsa.qwords.org,例如将simplepost.php中的URL更改为: -

curl_setopt($ch, CURLOPT_URL,"http://www.voulsa.qwords.org/test.php");

新网址(已启用CURLOPT_HEADER)的响应为: -

HTTP/1.1 200 OK
Date: Sat, 26 Apr 2014 10:56:54 GMT
Server: Apache
X-Powered-By: PHP/5.3.19
Transfer-Encoding: chunked
Content-Type: text/html

Array
(
    [number] => 12345
    [status] => SUCCESS
    [msg] => OK
)

我没有更改除URL以外的任何内容并启用CURLOPT_HEADER和CURLOPT_VERBOSE,但适用于我的代码是: -

$ch = curl_init();

// basic cURL option
curl_setopt($ch, CURLOPT_URL,"http://www.voulsa.qwords.org/test.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "number=12345&status=SUCCESS&msg=OK");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// receive return value from remote server
$html = curl_exec($ch);
curl_close($ch);
echo($html);