curl — php файл не работает в командной строке … но работает при запуске на localhost

Я создал очень простой маленький скрипт php, который я надеялся запустить в командной строке на моем терминале MacOSX.

Если я просто наберу echo "test" это выводится просто отлично.

Теперь я добавил запрос к этому скрипту, чтобы получить некоторые данные из API, а затем набрать print_r $result,

К сожалению, результат никогда не выводится в командную строку. Если сейчас я запускаю точно такой же php-файл на моем локальном хосте MAMP, все работает нормально, и содержимое выводится правильно.

Это мой код:

require 'connection.php';

$store = new connection('danny', 'https://store-bgf5e.mybigcommerce.com/api/v2/', 'XXXXX');
$customers = $store->get('/customers');

foreach($customers AS $customer) {
print "------ Getting Adresses for: " . $customer['first_name'] . ' '         . $customer['last_name'] . ' -------';
if( isset($customer['addresses']['resource']) ) {
print_r($store->get($customer['addresses']['resource']));
}
}

exit;

Я знаю, что API возвращает адреса очень хорошо, поэтому вызов определенно работает.

Вот что говорит Керл:

*   Trying 63.141.159.120...
* TCP_NODELAY set
* Connected to store-bgf5e.mybigcommerce.com (63.141.159.120) port   443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /Applications/MAMP/Library/OpenSSL/cert.pem CApath: none
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: C=AU; ST=New South Wales; L=Ultimo; O=Bigcommerce Pty Ltd; CN=*.mybigcommerce.com
*  start date: Jun  4 00:00:00 2015 GMT
*  expire date: Sep  1 12:00:00 2018 GMT
*  subjectAltName: host "store-bgf5e.mybigcommerce.com" matched cert's "*.mybigcommerce.com"*  issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert SHA2 High Assurance Server CA
*  SSL certificate verify ok.
> GET /api/v2/customers HTTP/1.1
Host: store-bgf5e.mybigcommerce.com
Authorization: Basic     ZGFubnk6M2QyNjE5NTdjZGNjMTNlYmU1MTJiNDRiMjE1NGJiZGZmMGRjNTUxMw==
Accept: application/json
Content-Type: application/json

< HTTP/1.1 200 OK
< Server: openresty
< Date: Fri, 05 May 2017 19:26:27 GMT
< Content-Type: application/json
< Transfer-Encoding: chunked
< Connection: keep-alive
< Set-Cookie: fornax_anonymousId=0ff167a5-e158-4ff8-8962-67b19bd4271b; expires=Mon, 03-May-2027 19:26:27 GMT; path=/; domain=.store-bgf5e.mybigcommerce.com
< Last-Modified: Thu, 13 Apr 2017 22:34:54 +0000
< X-BC-ApiLimit-Remaining: 2147483622
< X-BC-Store-Version: 7.6.0
<
* Curl_http_done: called premature == 0
* Connection #0 to host store-bgf5e.mybigcommerce.com left intact

Мне кажется, что Керл все выполняет правильно. Это почти как успешный запрос curl предотвращает запуск любого другого кода PHP. Я ожидаю увидеть адреса, выводимые в командную строку из-за «print_r».

Заранее спасибо за любые советы, которые вы могли бы иметь.

-1

Решение

можно попробовать var_dump твой результат и посмотри что получится. Для вашего ответа curl я не увидел ни одного заголовка длины содержимого, я думаю, что curl возвращает пустую строку.

и, пожалуйста, вы можете опубликовать свой php код?

0

Другие решения

Понял это. Я использовал эту платформу для подключения к API BigCommerce: https://github.com/adambilsing/PHP-cURL-lib-for-Bigcommerce-API/blob/master/connection.php

в http_parse_headers метод connection класс есть оператор if в строке 54:

if ($retVal['X-Bc-Apilimit-Remaining'] <= 100) {
sleep(300);
}

Это приведет к тому, что скрипт перейдет в режим сна, даже если $retVal['X-Bc-Apilimit-Remaining'] является null,

Изменение на это решило проблему:

if ( isset($retVal['X-Bc-Apilimit-Remaining']) && $retVal['X-Bc-Apilimit-Remaining'] <= 100) {
sleep(300);
}

Это довольно очевидно, как только вы посмотрите на это. Я даже не знал, что в php есть команда sleep.

Спасибо всем, кто пытался понять это 🙂

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector