Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.09.2011, 04:38
Spazm вне форума Посмотреть профиль Отправить личное сообщение для Spazm Найти все сообщения от Spazm
  № 1  
Ответить с цитированием
Spazm

Регистрация: Jul 2009
Сообщений: 20
По умолчанию Проблема с чтением XML данных флешем из php

Здравствуйте.
Я извиняюсь, что поднял заново уже имеющуюся тему - просто там пару дней никто не отвечал и я подумал может она закрыта или еще что... если что ответте и перенесите в другую..
в общем вопрос такой:
Столкнулся судя по всему с похожей проблемой. Раньше я использовал, найденный в нете класс парсера xml. - все как помнится работало на ура... Прошло некоторое время и мне опять понадобилось отпарсить xml во флеше, код xml долген генериться в php. Самым большим ударом была утрата всех работающих по старому файлов, где я посмотрел бы что да как. Я нашел заново парсер в инете, нашел файл php, который у меня по запросу брал данные из базы и отправлял через echo во флеш. На радостях, что нашел файлы я написал аналог и запустил это дело.. но ничего не произошло. Я переправерил синтаксис и опять ничего не произошло. Далее я прочел файл xml, который был описан в примере, сохранив файл в юникоде. ОСчастье - все заработало. Но читается только этот самый xml, а php файл продолжал по прежнему молчать.. Кстати тот мой старый файл (как говорит notepad++) в кодировке ANSI, ну да не суть - я сделал как вы тут написали и мой файл, условно с именем get_test_xml.php в UTF-8, но все равно ничего не происходит((( В общем код на стороне сервака такой (ссылку не даю т.к. у меня на Денвере файлы)
Вот это раньше работало:

PHP код:
<?

extract
($_GET);
extract($_POST);

  require(
"req/my_sql.class");
  
$text=new  class_my_sql;
  
$ok=false;
  if (
$text->my_sql_connect()) {/*echo "Connection complite.";*/$ok=true;} else {echo '<font color="red">Connection falilure!</font>';}
  if (
$ok) {


$content="";
$content.='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';

$k=0;

$text->my_sql_query='select * from harakteristiki';
$text->my_sql_execute();  
while (
$res=mysql_fetch_object($text->my_sql_res)) 
    {
        
$harakteristiki_title=$res->harakteristiki_title;
        
$harakteristiki_coment=$res->harakteristiki_coment;
    
        
$content.='<razdel>';
        
$content.='<number>'.$k.'</number>';//Номер
        
$content.='<title>'.$harakteristiki_title.'</title>';//title
        
$content.='<coment>'.$harakteristiki_coment.'</coment>';//url
        
$content.='</razdel>';

        
$k++;
    }
//end while

$content str_replace (">\n"">"$content);
$content str_replace ("&laquo;""«"$content);
$content str_replace ("&raquo;""»"$content);
$content str_replace ("&ndash;""—"$content);
$content str_replace ("&nbsp;"" "$content);
//$content = str_replace ("<br />", "&#smolkinbr", $content);
//$content = str_replace ("<br>", "&#smolkinbr", $content);

//echo $content;
    
echo $text->unicon($content);

}
//end if $ok
?>
но той базы уже нет, да и разбирать xml я немного разучился - сейчас я пытаюсь что б заработал пример по ссылке http://alt-f4.ru/actionscript-and-xml#comment-3182 - повторяюсь, .xml файл читается, а .php файл - нет.

PHP код:
<?php 

extract
($_GET);
extract($_POST);

require(
"../cms/req/my_sql.class");
$text=new  class_my_sql;
$ok=false;
if (
$text->my_sql_connect()) {/*echo "Connection complite.";*/$ok=true;} else {echo '<font color="red">Connection falilure!</font>';}

if (
$ok) {
 


$content="<?xml version='1.0' encoding='UTF-8' standalone='yes'?><data><group gr_id='0' gr_name='eee'><item id='0' name='rrr'>2</item><item id='1' name='rrr'>2</item></group></data>";//))

$content str_replace (">\n"">"$content);
$content str_replace ("&laquo;""«"$content);
$content str_replace ("&raquo;""»"$content);
$content str_replace ("&ndash;""—"$content);
$content str_replace ("&nbsp;"" "$content);

//$content = str_replace ("<br />", "&#smolkinbr", $content);
//$content = str_replace ("<br>", "&#smolkinbr", $content);


    
echo $text->unicon($content);


//echo $content;
}//end if $ok
else
{
    
}
//end else

?>
Второй день мучаюсь(( Заранее спасибо если поняли в чем у меня может быть ошибка.

Добавлено через 11 часов 37 минут
что - никто не ответит7(( хм.. может я не в ту тему написал.. да не, вроде в ту.. лана, подожду.. видимо все гуру заняты))

Старый 16.09.2011, 07:16
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
.xml файл читается, а .php файл - нет.
Флеш не умеет читать php файлы, это дело апачи сервера.
+ где вообще код из флешки? Здесь форум по флешу, а не по php

Старый 16.09.2011, 18:18
redflasher вне форума Посмотреть профиль Отправить личное сообщение для redflasher Найти все сообщения от redflasher
  № 3  
Ответить с цитированием
redflasher

Регистрация: Jul 2011
Сообщений: 6
Spazm, проведелайте следующее:
1. обратитесь браузером к php-файлу, убедитесь что он без ошибок выводит xml.
2. если рнр-код работает, то скопируйте выводимый им xml и сохраните в отдельный xml-файл. затем запустите его с помощью IE. Посмотрите, не возникает ли ошибок в парсинге xml у ИЕ.
3. если ошибок нет, то напишите здесь ту часть as3-кода, которая получает xml-код из php и функцию для парсинга. Будет здорово, если сможете выделить строку, на которую ругается флеш-дебаггер.
4. далее - будем смотреть..

Старый 17.09.2011, 00:03
Spazm вне форума Посмотреть профиль Отправить личное сообщение для Spazm Найти все сообщения от Spazm
  № 4  
Ответить с цитированием
Spazm

Регистрация: Jul 2009
Сообщений: 20
goodguy, [Флеш не умеет читать php файлы, это дело апачи сервера.] - да я знаю, ну прошу прощения если я не правильно выразился. [где вообще код из флешки? Здесь форум по флешу, а не по php] - код брал с http://alt-f4.ru/actionscript-and-xml#comment-3182

Код класса парсера
Код AS1/AS2:
import mx.utils.Delegate; // подключаем Delegate class
class MyXml {
   var file:String; // адрес/имя xml-файла
   private var _xml:XML = null; // загруженный обьект xml
   public var _data:Object = null; // результирующий объект с данными
   // конструктор класса (аргумент - имя файла):
   public function MyXml(f:String) {
      this.file = f;
      this._xml = new XML(); // создаем объект xml
      // игнорировать текстовые узлы, содержащие только пробельные символы:
      this._xml.ignoreWhite = true;
      // указываем область действия обработчику:
      this._xml.onLoad = Delegate.create(this, xmlParser);
      this._xml.load(this.file); // начинаем загрузку xml-документа
   }
   private function xmlParser(success):Void {
      // метод load возвражает булевое значение - успешность загрузки:
      if (success) {
		  trace('k');
         this._data = new Object(); // инициализируем объект для данных
         var group = this._xml.firstChild.firstChild; // берем указатель на первый элемент
         while (group) { // и в цикле пробегаем по всем остальным
            var gr_id = group.attributes.gr_id;
            this._data[gr_id] = new Object();
            this._data[gr_id]['gr_name'] = group.attributes.gr_name;
            this._data[gr_id]['items'] = new Object;
            var item = group.firstChild; // первый ребенок группы
            while(item) { // цикл по детям
               var id = item.attributes.id;
               this._data[gr_id]['items'][id] = new Object();
               this._data[gr_id]['items'][id]['name'] = item.attributes.name;
               // для текстового нода в АС2 нужно брать firstChild, а потом уже nodeValue:
               this._data[gr_id]['items'][id]['description'] = item.firstChild.nodeValue;
               item = item.nextSibling;
            }
            group = group.nextSibling;
         }
      }
      // вызываем внешнюю функцию для распечатки (читай - использования) полученных данных,
      // параметр - прошла ли загрузка успешно
      _root.printXmlData(success);
   }
}
код в первом кадре
Код AS1/AS2:
//New_fall
var start_data_yes:Number;
 
onEnterFrame = function()
{
	if(String(start_data_yes)=="undefined")
	{
		start_data_yes=1;
		//Стартовали
		trace("Инициализация данных...");
 
		//_______________________________ Подключение класса вывода ______________________
		var trace_clss_ex:trace_clss = new trace_clss();//Подключаем класс trace_clss
		_global.trace_clss_ex = trace_clss_ex;
 
		_global.trace_clss_ex.setWindow(_root.trace_mc);
		_global.trace_clss_ex.setTrace("Подключен класс trace_clss");
 
		//_______________________________ Подключение класса данных пользователя ___________________________
		var user_data_clss_ex:user_data_clss = new user_data_clss();
		_global.user_data_clss_ex = user_data_clss_ex;
 
		_global.user_data_clss_ex.setFolderPath("game_xml_files");
		_global.user_data_clss_ex.setFileUserData("get_user_data_xml.php");
		_global.user_data_clss_ex.XMLDataUserLoad();
 
	}//end if
 
	if(_global.user_data_clss_ex.getDataUserIsset()==1)
	{
		//Если мы здесь - значит данные юзера успешно прочитались
		_global.user_data_clss_ex.setDataUserIsset(2);//Данные юзера прочлись, пометим временную ненужность получения повторных данных
 
		_global.trace_clss_ex.setTrace("данные юзера успешно прочитались");
 
		if(_global.trace_clss_ex.getXmlStatus()=="ok")
		{
			_global.trace_clss_ex.setTrace("подтверждение об успешности чтения");
		}//end if
		else
		{
			_global.trace_clss_ex.setTrace("лажа какая-то...");
		}//end if
 
 
	}//end if
 
		var t=_global.user_data_clss_ex.getXmlStatus();
 
		_global.trace_clss_ex.setTrace(t);
 
 
 
}//end onEnterFrame
 
import MyXml // подключаем класс
var myxml:MyXml = new MyXml('get_test_xml.php'); // создаем экземпляр - объект myxml
function printXmlData(succ:Boolean):Void {
   if (!succ) {
      trace('Возникла ошибка при попытке загрузить xml');
   }else {
	   trace('ok');
      // распечатываем наш объект с помощью двух вложенных циклов
      for (var gr_id in myxml._data) {
         trace(myxml._data[gr_id]['gr_name'] + ' [' + gr_id + ']');
         for (var id in myxml._data[gr_id]['items']) {
            trace('--' + myxml._data[gr_id]['items'][id]['name'] + ' [' + id + ']');
            trace('--' + myxml._data[gr_id]['items'][id]['description']);
         }
      }
   }
}
_____________________________________________________________________________
_____________________________________________________________________________
goodguy, спасибо большое за ответ - у меня сейчас нет времени проследовать вашим указаниям - смогу это сделать только через пару дней. Но я сразу напишу о результатах как только сделаю что вы сказали. Здорово было бы решить эту штуку - это важный момент и без него тяжело... конечно, на крайняк я смогу формировать из php xml код и сохранять его в файле, а флешем уже читать файл, но это ресурсозатратно будет((

Старый 22.09.2011, 06:30
Spazm вне форума Посмотреть профиль Отправить личное сообщение для Spazm Найти все сообщения от Spazm
  № 5  
Ответить с цитированием
Spazm

Регистрация: Jul 2009
Сообщений: 20
redflasher, так.. я прошел по пунктам, которые вы предложили.. получилось следующее:
1)[обратитесь браузером к php-файлу, убедитесь что он без ошибок выводит xml.] + [если рнр-код работает, то скопируйте выводимый им xml и сохраните в отдельный xml-файл. затем запустите его с помощью IE. Посмотрите, не возникает ли ошибок в парсинге xml у ИЕ.]- ну он выводит 23 в то время как код у него <?xml version="1.0" encoding="UTF-8" standalone="yes"?><data><group gr_id="0" gr_name="eee"><item id="0" name="Javascript">2</item><item id="1" name="Actionscript">3</item></group></data> - ну, понятное дело теговые конструкции он не визуализирует. Если я правильно понял - я взял эти, выведенные Оперой (если имеет значение кто вывел) 23 (или надо было xml код брать7...) в общем скопировал это в Дримвьверовский шаблон с уже предложенным <?xml version="1.0" encoding="windows-1251"?> получилось <?xml version="1.0" encoding="windows-1251"?>23 - блин я что-то не так понял наверное.. а смысл так делать777 Ну да ладно, сделал так, сохранил это дело как условно xxx.xml потом открыл IE - он мне выдал

Код:
Не удается отобразить страницу XML 
Не удается просмотреть ввод XML с использованием списка стилей . Исправьте ошибку и затем нажмите кнопку "Обновить" или повторите попытку позднее. 


--------------------------------------------------------------------------------

Ошибка в элементе верхнего уровня документа. Ошибка при обработке ресурса ''http://newfall.ru/game_xml_files/xxx2.xml''. С...

<?xml version="1.0" encoding="windows-1251"?>23
---------------------------------------------^
Но вообще-то то же самое говориться, когда читается тот xml файл, с чтением которого у флеша проблем не возникло. вот его код:
Код:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><data><group gr_id="0" gr_name="eee"><item id="0" name="Javascript">2</item><item id="1" name="Actionscript">3</item></group></data>
вот а на счет [если ошибок нет, то напишите здесь ту часть as3-кода, которая получает xml-код из php и функцию для парсинга. Будет здорово, если сможете выделить строку, на которую ругается флеш-дебаггер.] - там as2 и код я чуть ниже выложил, в предыдущем ответе. Флеш при этом всем не ругается, он говорит, что xml прочелся, ну он выводит в трейсе "k" в куске
Код:
      this._xml.onLoad = Delegate.create(this, xmlParser);
      this._xml.load(this.file); // начинаем загрузку xml-документа
   }
   private function xmlParser(success):Void {
      // метод load возвражает булевое значение - успешность загрузки:
      if (success) {
		  trace('k');
только вот то что в нутри не читает - просто трейс ничего не выводит когда к примеру обращаешься к спормированному из данных объекту - просто пустой трейс... а файл xml читается на ура - выводит - ну я там чутов xml поменял, но не суть - вот результат трейса флешки - все зашибись:
Код:
eee [0]
--Actionscript [1]
--44
--Javascript [0]
--2
______________
Ладно, я еще покопаюсь - может осилю это дело... эх.. если что разрулю - отпишусь
__________________________________________________________

Добавлено через 21 минуту
и если я беру код, сформированный php из браузера (к примеру фаерфокс) и сохраняю код полученного xml в файл xml -то все тоже наура читается. Может флешу не получается получить инфу из php, может эта вся лажа потому что я с локалхоста работаю.. хм.. я вот не помню - тогда давно когда у меня работало у меня файлы лежали в инете или тоже локально...

Добавлено через 1 час 10 минут
сделал как - попробовал выложить файлы в инет - та же картина - xml файл читает, а тоже самое если выводит php - не читает. Значит дело не в том что php находился локально, а и менно в том что он выводит что-то не то.. хотя не исключено, что опроблема ив том и в том))) буду думать дальше

Добавлено через 1 час 38 минут
гы. попробовал такую хрень - взял файл php, который раньше работал точно и поменяв в нем кусок для вывода на тот, что в файле xml который читается сейчас, сохранил в инете - это все прочлось))) т.е. php прочелся.. но стоило мне открыть это с локальной машины как та же неудача... походу либо я чего-то не догнал, либо проблема также в том, что я смотрю через локалхост... мля, ну в чем же дело-то(( сейчас перепроверю все еще раз..

Добавлено через 1 час 50 минут
ага... добавка есть - если флешку запускать на локальном то все же работает, но - виснет сначала, потом браузер выдает окошко "Этот ролик содержит сценарий, замедляющий работу Adobe Flash Player 10. Если продолжить его выполнение, то компьютер может перестать отвечать на запросы" ... потом флешка выводит что прочла - прочла вроде правильно... гм.. а если я к тем же двум файлам (флешка и php ) обращаюсь так, что они в инете лежат - то вообще сразу ответ правильный дается (читает подержимое xml). код флеша не изменился, код php вот такой:
PHP код:
<?

extract
($_GET);
extract($_POST);



$content="";
$content.='<?xml version="1.0" encoding="UTF-8" standalone="yes"?><data><group gr_id="0" gr_name="eee"><item id="0" name="Javascript">2</item><item id="1" name="Actionscript">3</item></group></data>';


$content str_replace (">\n"">"$content);
$content str_replace ("&laquo;""«"$content);
$content str_replace ("&raquo;""»"$content);
$content str_replace ("&ndash;""—"$content);
$content str_replace ("&nbsp;"" "$content);
//$content = str_replace ("<br />", "&#smolkinbr", $content);
//$content = str_replace ("<br>", "&#smolkinbr", $content);

//echo $content;
    
echo unicon($content);

function 
unicon($str$to_uni true) {
    
$cp = Array (
        
"А" => "&#x410;""а" => "&#x430;",
        
"Б" => "&#x411;""б" => "&#x431;",
        
"В" => "&#x412;""в" => "&#x432;",
        
"Г" => "&#x413;""г" => "&#x433;",
        
"Д" => "&#x414;""д" => "&#x434;",
        
"Е" => "&#x415;""е" => "&#x435;",
        
"Ё" => "&#x401;""ё" => "&#x451;",
        
"Ж" => "&#x416;""ж" => "&#x436;",
        
"З" => "&#x417;""з" => "&#x437;",
        
"И" => "&#x418;""и" => "&#x438;",
        
"Й" => "&#x419;""й" => "&#x439;",
        
"К" => "&#x41A;""к" => "&#x43A;",
        
"Л" => "&#x41B;""л" => "&#x43B;",
        
"М" => "&#x41C;""м" => "&#x43C;",
        
"Н" => "&#x41D;""н" => "&#x43D;",
        
"О" => "&#x41E;""о" => "&#x43E;",
        
"П" => "&#x41F;""п" => "&#x43F;",
        
"Р" => "&#x420;""р" => "&#x440;",
        
"С" => "&#x421;""с" => "&#x441;",
        
"Т" => "&#x422;""т" => "&#x442;",
        
"У" => "&#x423;""у" => "&#x443;",
        
"Ф" => "&#x424;""ф" => "&#x444;",
        
"Х" => "&#x425;""х" => "&#x445;",
        
"Ц" => "&#x426;""ц" => "&#x446;",
        
"Ч" => "&#x427;""ч" => "&#x447;",
        
"Ш" => "&#x428;""ш" => "&#x448;",
        
"Щ" => "&#x429;""щ" => "&#x449;",
        
"Ъ" => "&#x42A;""ъ" => "&#x44A;",
        
"Ы" => "&#x42B;""ы" => "&#x44B;",
        
"Ь" => "&#x42C;""ь" => "&#x44C;",
        
"Э" => "&#x42D;""э" => "&#x44D;",
        
"Ю" => "&#x42E;""ю" => "&#x44E;",
        
"Я" => "&#x42F;""я" => "&#x44F;"
    
);
    
    if (
$to_uni) {
        
$str strtr($str$cp);
    } else {
        foreach (
$cp as $c) {
            
$cpp[$c] = array_search($c$cp);
        }
        
$str strtr($str$cpp);
    }
    
    return 
$str;
}
?>
Почему ж он не может нормально все читать, блин...

Добавлено через 2 часа 2 минуты
короче, на данный момент - так - swf может читать php, но при этом выводит сообщение о том, что
Код:
Этот ролик содержит сценарий, замедляющий работу Adobe Flash Player 10. Если продолжить его выполнение, то компьютер может перестать отвечать на запросы
, но после выдается то что прочел флеш - читает правильно. А в Adobe Flash CS3 трейсит только до момента когда файл прочелся, а что в файле не показывает.. странно все это(( ааа, памагите


Последний раз редактировалось Spazm; 22.09.2011 в 06:33.
Старый 21.10.2011, 02:16
Spazm вне форума Посмотреть профиль Отправить личное сообщение для Spazm Найти все сообщения от Spazm
  № 6  
Ответить с цитированием
Spazm

Регистрация: Jul 2009
Сообщений: 20
По умолчанию все, тема закрыта наверное

короче не знаю, может я еще что изменил (менял все подряд в ходе експериментов), но все начало работать с момента когда я проставил файлу .php абсолютный путь, в то время как .xml он отлично читал и по относительному. Это видимо что-то в настройках апача, хз, но если это чем-то кому-то поможет буду рад. Всем спасибо.

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:29.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.