我很难使用curl PHP,因为我是PHP的新手。问题是我没有从curl请求中获得任何返回值。我正在访问的远程文件包含以下代码:
$test->getCall();
public function getCall() {
$var = array('fname'=>'jack','lname'=>'williams');
return $var;
}
我正在拨打电话的脚本。
try{
$ch = curl_init();
if (FALSE === $ch){
throw new Exception('failed to initialize');
}
curl_setopt($ch, CURLOPT_URL,"http://www.xyz.com/app/src/test.php");
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $msg);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$p_result = curl_exec($ch);
var_dump($p_result);
print_r($p_result);
if (FALSE === $p_result) {
throw new Exception(curl_error(), curl_errno());
curl_close($ch);
} else{
curl_close($ch);
return $p_result;
}
}catch(Exception $e) {
trigger_error(sprintf('Curl failed with error #%d: %s',$e->getCode(), $e->getMessage()),E_USER_ERROR);
}
我在$p_result
中没有任何价值,也没有curl_error()
例外。
答案 0 :(得分:14)
无论您在test.php
中回应什么,curl都会将其读作String
。在你的情况下,你没有回音。您调用一个返回数组的函数,但是您不打印该数组,因此不会向输出发送任何内容。如果你想在curl请求之后在requestVal.php
中获得相同的数组,你需要以某种方式对它进行编码,我建议使用JSON,因为它很容易入手。举一个简单的例子,取代$test->getCall();
,你可以做到:
echo json_encode($test->getCall());
在requestVal.php
:
$array = json_decode(trim($p_result), TRUE);
print_r($array);
您可以在php.net
找到每个功能说明。
答案 1 :(得分:1)
如果您使用curl,那么如果您在任何浏览器中运行test.php脚本,您应该会得到完全相同的结果。所以,如果你的test.php是这样的:
echo "123";
在您的浏览器中,您会看到“123”,这也是您将进入$p_result
变量的内容。如果你的test.php是这样的:
function foo() {
return "123";
}
foo();
您在浏览器中看不到任何内容,也无法在$p_result
中获取任何内容。
所以,尝试改变你的test.php:
public function getCall() {
$var = array('fname'=>'jack','lname'=>'williams');
return $var;
}
var_dump($test->getCall()); // of course you will show these values in better way (depends on your needs)
答案 2 :(得分:0)
$test->getCall();
public function getCall() {
$var = array('fname'=>'jack','lname'=>'williams');
echo serialize($var);
}
因此,您可以通过从远程服务器反序列化数据,在 requestVal.php 代码中捕获序列化数据
unserialize($content)