Вход • Регистрация

cURL в коде PHP

  • 06 июля 2017 г.
  • Собсна, медленно пилю скрипт для выгрузки товаров в группу ВК, на текущий момент уперся в то, что нужно загружать картинку на сервер в формате в формате multipart/form-data; из того, что я нагуглил по этому поводу, вытекает, что для этих целей следует пользоваться программой cURL, которая, соответственно, должна быть установлена на сервере. Вопрос: кто-нибудь знает, есть она в diafan cloud`e? А то я какбэ попробовал ее вызвать из РНР, на что мне написали, что Class 'CURLFile' not found, что наводит на мысль, что ее таки нет. Хотя, после назначения
    Код
    $CURL = curl_init();
    при вызове
    Код
    var_dump ($CURL);
    пишет, что там таки что-то мутное есть.
    • 06 июля 2017 г.
    • если есть доступ к менеджеру файлов в облаках то можно попробовать в корне сайта сделать файл info.php c содержимым
      Код
      <?php
      // Показать всю информацию, по умолчанию INFO_ALL
      phpinfo();

      и в строке URL обратится к этому файлу.
      Если среди установленых модулей cURL присутствует то тогда значит есть такой и им можно пользоваться.
      ну а
      Код
      var_dump ($CURL);
      не показатель.
      • 06 июля 2017 г.
      • Спасибо! Пишет, что, вроде, есть. Тогда - почему не воспринимается цэ
        Код

        $CURL = curl_init();
        $parameters = [
        'file1' => new CURLFile($picture) // PHP >= 5.5.0
        // 'file1' => '@path/to/1.jpg' // PHP < 5.5.0
        ];

        // Ссылка, куда будем загружать картинку - это upload_url
        curl_setopt($CURL, CURLOPT_URL, $upload_url);
        // Говорим cURL, что это POST-запрос
        curl_setopt($CURL, CURLOPT_POST, true);

        // Говорим cURL, какие поля будем отправлять
        curl_setopt($CURL, CURLOPT_POSTFIELDS, $parameters);

        // Говорим cURL, что нам нужно знать, что ответит сервер, к которому мы будем обращаться
        curl_setopt($CURL, CURLOPT_RETURNTRANSFER, true);

        // Выполняем cURL-запрос. В этой переменной будет JSON-ответ от ВКонтакте
        $curl_result = curl_exec($CURL);

        // Закрываем соединение
        curl_close($CURL);

        То есть, если бы мне написали про то, что $upload_url не назначена, еще хрен с ним. Но отсутствие CURLFile - наводит на мысль, что я как-то неправильно вызываю cURL.
        • 06 июля 2017 г. , редакция: 06 июля 2017 г.
        • Блин, ну тут сложно что-то сказать.
          Во первых, я бы завёл на локалхосте у себя на машине и попробовал пульнуть в VK данные.
          Так проще понять где засада.

          • Некорректное подключение cURL
          • Некорректная настройка параметров
          • Ошибка

          Вообщем тоже не мало наколупался с этим, когда делал модули взаимодействующие с нашими сервисами.
        • 06 июля 2017 г.
        • Чего-то мне вот эта штука не нравится
          Код
          $parameters = [
          'file1' => new CURLFile($picture) // PHP >= 5.5.0
          // 'file1' => '@path/to/1.jpg' // PHP < 5.5.0
          ];
          • 06 июля 2017 г.
          • Мне тоже не нравится - всякую хрень типа заголовка сайта cURL парсить таки в состоянии, значит, в принципе, работает, но неправильно указаны параметры. Буду ковырять дальше.
            • 06 июля 2017 г.
            • версия php какая?
              • 06 июля 2017 г.
              • 5.4, дай бог памяти. POST-запрос успешно удалось-таки сформировать, но на предложение отправить файл мне отвечают, что файл не найден (хотя он есть) - видимо, что-то не так в синтаксисе параметра "file", только нигде пока не нашел, что именно.
                К текущему моменту у меня что-то типа
                Код
                if (isset($_GET['code'])) {
                $result = false;
                global $APP_ID, $SECRET_APP, $URL;
                $params = array(
                'client_id' => $APP_ID,
                'client_secret' => $SECRET_APP,
                'code' => $_GET['code'],
                'redirect_uri' => $URL
                );
                $token = json_decode(file_get_contents('https://oauth.vk.com/access_token' . '?' . urldecode(http_build_query($params))), true);

                // var_dump ($token);

                $ACCESS_TOKEN_test = $token['access_token'];

                echo '<br>';
                }

                if (isset ($ACCESS_TOKEN_test)){
                $ACCESS_TOKEN=$ACCESS_TOKEN_test;
                echo '<br>';
                } else {$ACCESS_TOKEN='none';}

                if ($ACCESS_TOKEN !== 'none') {
                $result = json_decode(file_get_contents('https://api.vk.com/method/photos.getMarketAlbumUploadServer?group_id='.$GROUP_ID.'&access_token='.$ACCESS_TOKEN.'&v=5.52'));
                $upload_url = $result-> response -> upload_url;
                echo $upload_url.'<br><br>';
                $ch = curl_init();

                $parameters = array('file' => '@http://sunnydogspb.ru/userfiles/shop/large/35_king-charlz-spaniel.jpg');

                // Ссылка, куда будем загружать картинку - это upload_url
                curl_setopt($ch, CURLOPT_URL, $upload_url);

                // Говорим cURL, что это POST-запрос
                curl_setopt($ch, CURLOPT_POST, true);

                // Говорим cURL, какие поля будем отправлять
                curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);

                // Говорим cURL, что нам нужно знать, что ответит сервер, к которому мы будем обращаться
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

                // Выполняем cURL-запрос. В этой переменной будет JSON-ответ от ВКонтакте
                $ch_result = curl_exec($ch);

                if ($ch_result === FALSE) {
                //Тут-то мы о ней и скажем
                echo "cURL Error " . curl_error($ch);
                return;
                }

                // Закрываем соединение
                curl_close($ch);

                var_dump ($ch_result);
                echo '<br>';
                echo '<br>';
                echo '<br>';
                }

                В ошибке выводит

                couldn't open file "'http://sunnydogspb.ru/userfiles/shop/large/35_king-charlz-spaniel.jpg'"
              • 07 июля 2017 г.
              • Вижу, что уже разобрались.
                На будущее, если у вас 5,4, то внимательно смотрим на коммент
                // PHP >= 5.5.0
                )
  • 07 июля 2017 г. , редакция: 07 июля 2017 г.
  • Слава Гуглю, покровителю мартышек от программирования! Да скомпиллирует он мои коды в молитвы богу Вишну. Короче, истина где-то тут http://phpfaq.ru/newbie/paths.
    В итоге, нужно писать вместо
    Код
    $parameters = array('file' => '@http://sunnydogspb.ru/userfiles/shop/large/35_king-charlz-spaniel.jpg');

    такое
    Код
    $parameters = array('file' => '@'.$_SERVER['DOCUMENT_ROOT'].'/userfiles/shop/large/35_king-charlz-spaniel.jpg');

    Тогда что-то работает.
    • 07 июля 2017 г.
    • Вот он путь самурая. Так держать.

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум