Данные повреждены при публикации

У меня есть два поддоменов, admin.xxx.com (сервер 1) и ressource.xxx.com (сервер 2)

Сервер 1 имеет PHP-скрипт, который динамически генерирует и записывает Javascript-файл на основе некоторых параметров. Эта часть работает нормально, используя PHP-команду «file_put-contents ()»

Мне нужно записать файл javascript на сервер 2, то есть тот же домен, другой поддомен; не удалось выполнить междоменную запись, поэтому я использовал этот CURL-код для отправки его на сервер, заставив файл «write.php» на сервере 2 перехватить его и записать на диск от имени сервера 1:

$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, "http://ressource.xxx.dk/write.php");
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, "asset=".base64_encode($asset));

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);

Это отчасти работает. Он генерирует файл, содержащий JavaScript, но код поврежден на несколько строк

<param name="'+aed+'" value="'¥õ•±Í•íÙ…Èhõ¡È¤íh¹Í•Ñ (15 lines of garbage)

и затем становится читаемым снова в конце.

Есть идеи, почему это происходит?

2

Решение

Вам нужно URL кодировать данные base64 так, как вы это делаете. Строки Base64 могут содержать символы «+», «=» и «/». Это может испортить отправляемые параметры сообщения.

 curl_setopt($ch,CURLOPT_POSTFIELDS, "asset=".urlencode(base64_encode($asset)));

Если вы используете кодировку base64, чтобы попытаться защитить ее для передачи, вам не нужно этого делать, если вы ее кодируете.

  curl_setopt($ch,CURLOPT_POSTFIELDS, "asset=".urlencode($asset));

Другой вариант — не отправлять строку, а массив для полей сообщения. Тогда curl сделает кодировку для вас:

  curl_setopt($ch,CURLOPT_POSTFIELDS, array("asset" =>$asset));
1

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

Других решений пока нет …

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