php curl vs cli curl, posting xml php curl vs cli curl, posting xml curl curl

php curl vs cli curl, posting xml


When you use backticks then PHP invokes a shell. This can be dangerous, especially when you include variables in the command. If someone has a way to influence the value of $api_root they would be able to invoke any command on your system.

Using the API is much safer and probably faster as well as the curl libraries are loaded into PHP.

As for why it's not working it seems others have answered that question :)


curl_exec returns true or false by default. You need to specify CURLOPT_RETURNTRANSFER:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

Since curl_exec is returning false (not NULL as indicated in the original question), try using curl_error() to determine why it's returning false.

TFM (read it): curl_exec(), curl_setopt()

Edit for posterity's sake:

The OP discovered that an SSL issue was the hindrance. The both libcurl (as called through PHP) and the curl command-line do SSL peer verification for every transaction, unless the user explicitly disables it.

The likely scenario is that the shell environment is using a different CA bundle than PHP's libcurl implementation. To remedy this, set CURLOPT_CAINFO to be the same as the shell's CURL_CA_BUNDLE environment variable and then peer verification should work.

@OP: I'd be curious to know if the above suggestion is confirmed working in your case, or if there is something else different with the SSL configuration.


in your php example you are missing
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

from php manual:curl_execReturns TRUE on success or FALSE on failure. However, if the CURLOPT_RETURNTRANSFER option is set, it will return the result on success, FALSE on failure.