Я создал очень простой маленький скрипт 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».
Заранее спасибо за любые советы, которые вы могли бы иметь.
можно попробовать var_dump твой результат и посмотри что получится. Для вашего ответа curl я не увидел ни одного заголовка длины содержимого, я думаю, что curl возвращает пустую строку.
и, пожалуйста, вы можете опубликовать свой php код?
Понял это. Я использовал эту платформу для подключения к 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.
Спасибо всем, кто пытался понять это 🙂