Получение высокоуровневого URL изображения из PHP - PullRequest
0 голосов
/ 17 мая 2018

Мне нужно получить изображение старшего чарта, и я нашел код для решения моей проблемы, получив имя изображения через ajax, а затем вставляю перед URL-адресом API Highcharts, и я могу загрузить изображение на PHPТеперь я хочу сделать этот процесс в PHP, начиная с имени, до загрузки;У меня есть этот код, чтобы получить имя старшего изображения:

        var optionsStr = JSON.stringify({
  "xAxis": {
    "categories": [
      "PRUEBA",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ]
  },
  "series": [
    {
      "data": [1, 3, 2, 4],
      "type": "line"
    },
    {
      "data": [5, 3, 4, 2],
      "type": "line"
    }
  ]
}),
        exportUrl ='https://export.highcharts.com/';
        dataString = encodeURI('async=true&type=image/jpeg&width=800&options=' + optionsStr);
            $.ajax(
            {
                type: 'POST',
                data: dataString,
                url: exportUrl,
                success: function(data)
                {
                    console.log('get the file from relative url: ', data);
                    grafica=exportUrl+data;
                },
                error: function(err)
                {
                    console.log('error', err.statusText)
                }
            });

Я получаю название графика: charts / chart.9973ffbcf0d748d6aae04ef6ec01979c.jpeg Я хочу знать, как получить то же самое в PHP, у меня есть этокод:

$DataEncoded = json_encode(
    array(
    'xAxis'=>
        array(
            'categories'=> ['Ene','Feb', 'Mar', 'Abr']
        ),
    'series'=>
        array(
            array(
                'data'=>[1,2,3,4],
                'type'=>'line'
            ),
            array(
                'data'=>[5,6,7,8],
                'type'=>'line'
            )
        )
    )
);
$DataExtra = 'async=true&type=image/jpeg&width=800&options=';
$dataString = urlencode('async=true&type=image/jpeg&width=800&options='.$DataEncoded);
$url ='https://export.highcharts.com/';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataString);
$json=curl_exec($ch);
if(curl_errno($ch)){
    echo "Entro al curl Error";
    throw new Exception(curl_error($ch));
}
var_dump(json_decode($json));
curl_close($ch);

Но я получаю фантастическое: NULL.Кто-то сделал это раньше?Я пытался сделать этот процесс через Angular 5, но мне нужно было запрограммировать работу cron для делегирования процесса, поэтому я решил использовать PHP.Я пытался с file_get_contents (), но веб-сервис дает мне: "Диаграмма данных не найдена".

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Я воспользовался рекомендациями Twisty и наконец получил название изображения, большое спасибо.

$dataString = ('async=true&type=image/jpeg&width=800&options='.$DataEncoded);
$url ='https://export.highcharts.com/?';
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$dataString);
curl_setopt($ch, CURLOPT_POST, 1);

$headers = array();
$headers[] = "Accept: application/json";
$headers[] = "Content-Type: application/x-www-form-urlencoded";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
0 голосов
/ 17 мая 2018

Я подозреваю, что ваша проблема здесь:

curl_setopt($ch, CURLOPT_POSTFIELDS, $dataString);

Я полагаю, что это ожидание строки или массива.

Этот параметр может быть передан в виде строки с кодировкой, например'para1 = val1¶2 = val2 & ...' или в виде массива с именем поля в качестве ключа и данными поля в качестве значения.Если значение является массивом, заголовок Content-Type будет установлен в multipart / form-data.Начиная с PHP 5.2.0 значение должно быть массивом, если файлы передаются в эту опцию с префиксом @.Начиная с PHP 5.5.0 префикс @ устарел, и файлы можно отправлять с помощью CURLFile.

Попробуйте выполнить следующее:

$dataArray = array(
  "async" => true,
  "type" => "image/jpeg",
  "width" => 800,
  "options" => $DataEncoded
);

И ...

curl_setopt($ch, CURLOPT_POSTFIELDS, $dataArray);

Кредит @ Патрику Q за перехват типа кодировки.Вы отправляете не данные в формате JSON, а данные формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...