Intereting Posts

cURL-скрипт, работающий на localhost, но не на реальном сервере

Я пытаюсь отправить SMS через скрипт. Я использую curl для запуска API отправки SMS на сервере поставщика. fopen и file_get_contents заблокированы на моем сервере. Итак, cURL – мой единственный вариант.

Сценарий :-

// Initialize options for REST interface $adb_url="http://example.com"; $adb_option_defaults = array( CURLOPT_HEADER => false, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 2 ); // ArangoDB REST function. // Connection are created demand and closed by PHP on exit. function adb_rest($method,$uri,$query=NULL,$json=NULL,$options=NULL){ global $adb_url,$adb_handle,$adb_option_defaults; // Connect if(!isset($adb_handle)) $adb_handle = curl_init(); // Compose query $options = array( CURLOPT_URL => $adb_url.$uri."?".$query, CURLOPT_CUSTOMREQUEST => $method, // GET POST PUT PATCH DELETE HEAD OPTIONS CURLOPT_POSTFIELDS => $json, CURLOPT_PORT => 8080, CURLOPT_HTTPHEADER => Array('Content-type: text/plain') ); curl_setopt_array($adb_handle,($options + $adb_option_defaults)); // send request and wait for responce $responce = curl_exec($adb_handle); print_r(curl_getinfo($adb_handle)); return($responce); } // Create a collection $responce = adb_rest("GET","/bulksms/bulksms","username=xxx&password=xxx&type=2&dlr=1&destination=xxx&source=xxx&message=xxxxxx",''); 

Ответ cURL на серверный сервер:

 Array ( [url] => http://example.com/bulksms/bulksms? username=xxx&password=xxx&type=2&dlr=1&destination=xxx&source=xxx&message=xxxxxx [content_type] => [http_code] => 0 [header_size] => 0 [request_size] => 0 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 1.999604 [namelookup_time] => 1.315312 [connect_time] => 0 [pretransfer_time] => 0 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length] => -1 [upload_content_length] => -1 [starttransfer_time] => 0 [redirect_time] => 0 [certinfo] => Array ( ) [redirect_url] => ) 

Локальный ответ cURL:

 Array ( [url] => http://example.com/bulksms/bulksms? username=xxx&password=xxx&type=2&dlr=1&destination=xxx&source=xxx&message=xxxxxx [content_type] => text/plain [http_code] => 200 [header_size] => 129 [request_size] => 646 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.14 [namelookup_time] => 0 [connect_time] => 0.047 [pretransfer_time] => 0.047 [size_upload] => 0 [size_download] => 54 [speed_download] => 385 [speed_upload] => 0 [download_content_length] => 54 [upload_content_length] => 0 [starttransfer_time] => 0.14 [redirect_time] => 0 [certinfo] => Array ( ) [primary_ip] => xxx.xxx.xxx.xxx [primary_port] => 8080 [local_ip] => xxx.xxx.x.xxx [local_port] => 56359 [redirect_url] => ) 

Через localhost я получаю sms, тогда как через сервер я нет.

UPDATE – версия локального хоста:

 PHP Version 5.4.3 

Версия сервера php:

 PHP Version 5.3.27 

Это сложно сказать, но я бы рекомендовал добавить CURLOPT_CONNECTTIMEOUT в дополнение к CURLOPT_TIMEOUT к вашим параметрам завивки. В этом примере я устанавливаю значение CURLOPT_CONNECTTIMEOUT 5 . И установите CURLOPT_HTTPGET в значение TRUE . Кроме того, добавление CURLOPT_USERAGENT а также на случай, если удаленный сервер нуждается в чем-то в качестве пользовательского агента:

 // Compose query $options = array( CURLOPT_URL => $adb_url.$uri."?".$query, CURLOPT_CUSTOMREQUEST => $method, // GET POST PUT PATCH DELETE HEAD OPTIONS CURLOPT_POSTFIELDS => $json, CURLOPT_PORT => 8080, CURLOPT_HTTPGET => TRUE, CURLOPT_CONNECTTIMEOUT => 5, CURLOPT_USERAGENT => "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)", CURLOPT_HTTPHEADER => Array('Content-type: text/plain') ); curl_setopt_array($adb_handle,($options + $adb_option_defaults)); 

Кроме того, неясно, совпадает ли версия PHP с вашей локальной установкой с сервером.