У меня есть два поддоменов, 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)
и затем становится читаемым снова в конце.
Есть идеи, почему это происходит?
Вам нужно 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));
Других решений пока нет …