4

PHPを初めて使用するため、curlPHPを使用するのに苦労しています。問題は、curlリクエストから戻り値が得られないことです。このコードを持つ私がアクセスしているリモートファイルがあります:

test.php:

$test->getCall();
public function getCall() {
  $var = array('fname'=>'jack','lname'=>'williams');
  return $var;
}

電話をかけているスクリプト。

requestVal.php

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()

4

3 に答える 3

15

に何をエコーし​​て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

于 2012-12-02T19:51:08.217 に答える
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)
于 2012-12-02T14:49:43.273 に答える
0

Rantyが言ったように、test.phpコードで文字列を返すことができます

$test->getCall();
public function getCall() {
  $var = array('fname'=>'jack','lname'=>'williams');
  echo serialize($var);
}

したがって、リモートサーバーからデータをシリアル化解除することで、 requestVal.phpコードでシリアル化データをキャッチできます。

unserialize($content)
于 2013-11-22T06:24:48.400 に答える