У меня есть приличные знания PHP и AS3, но ни один из них не касается связи между ними.
Я пытаюсь использовать AS3 для отправки данных в PHP, и PHP сохранить их в XML.
Я не понимаю, как php должен реагировать на внешний код. Скрипт AS3 не запускает страницу, правильно? Он просто отправляет данные на него? Простое выполнение actionScript стороны не работает, равно как и загрузка php в браузер вручную (с правильно работающим apache, функция gibberish echo) или перезагрузка его после отправки AS3. XML остается пустым, нет возвращаемого значения для отслеживания. Все учебники имеют дело с до и после, предполагая, что я знаю, как php будет реагировать на получение данных из AS3. Может кто-нибудь сказать мне мою недостающую ссылку?
Если это имеет значение, мой соответствующий AS3:
public function xt(e:MouseEvent):void
{
marque = tmarque.text;
prix = tprix.text;
couleur = tcouleur.text;
xmlString = "<?xml version='1.0' encoding='utf-8'?>";
fichier = new XML(xmlString);
fichier = <ordinateurs />;
fichier.marque = marque;
fichier.couleur = couleur;
fichier.PRIX = prix;
var req = new URLRequest("C:/xampplite/htdocs/save_xml.php");
//(have also tried placing the php in same folder)
req.data = fichier;
req.contentType = "text/xml";
req.method = URLRequestMethod.POST;
var xmlSendLoad:URLLoader = new URLLoader();
xmlSendLoad.addEventListener(Event.COMPLETE, onComplete, false, 0, true);
xmlSendLoad.addEventListener(IOErrorEvent.IO_ERROR, onIOError, false, 0, true);
xmlSendLoad.load(req);
}
function onComplete(event:Event):void {
try {
var xmlResponse = new XML(event.target.data);
TXTtesticle.text = xmlResponse;
removeEventListener(Event.COMPLETE, onComplete);
removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
} catch (err:TypeError) {
TXTtesticle.text = "An error occured when communicating with server:\n" + err.message;
}
trace (xmlResponse);
placeText();
}
и PHP
<?php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"]))
{
$xml = $GLOBALS["HTTP_RAW_POST_DATA"];
$file = fopen("data.xml","wb");
fwrite($file, $xml);
fclose($file);
echo($GLOBALS["HTTP_RAW_POST_DATA"]);
}
?>
Использование AS для вызова PHP — это то же самое, что и Ajax. Просто вместо вызова Ajax из клиентского JS в браузере, это из AS во Flash.
Две проблемы, которые я вижу сразу с вашим кодом:
(1) $GLOBALS["HTTP_RAW_POST_DATA"]?
Зачем? Это устарело с PHP 5.6.0. И это было плохой практикой задолго до этого. Там это называется $_POST
что все остальные уже давно используют.
(2) var req = new URLRequest("C:/xampplite/htdocs/save_xml.php");
Вы не делаете запросы URL к локальной файловой системе. Вы делаете URL-запросы на веб-URL, например, var req = new URLRequest("http://localhost/save_xml.php");
Чтобы понять, что ваш PHP должен делать с POST, вы можете взглянуть на любой учебник по Ajax. Это не обязательно должно быть специфично для AS, потому что клиент, отправляющий http-запрос веб-серверу, является клиентом, отправляющим http-запрос веб-серверу, независимо от того, что это за клиент.
Других решений пока нет …