Просмотр полной версии : вопрос почему при обнавлении не выполняется php скрипт
darksranger
20.06.2007, 12:32
собственно заметил что при заходе скрипт делает свое дело нормально нажимаешь обновить и он не выполняется вопрос как то можно этим управлять ?
забыл главное добавить выполнение скрипта происходит с flash вот этим кодом sendXML = new XML("&number="+escape(this.heade));
receive = new XML();
receive.onLoad = onReceive;
sendXML.sendAndLoad('fortest.php', receive);
Для начала попробуй зайти на свой фортест обычным браузером и прочитай ответ.
Потом попробуй обновить в браузере.
Потом уже копай, что там у тебя во флэше.
[telepat mode]
Кэширование ?
[/telepat mode]
darksranger
20.06.2007, 13:00
в браузере только скрипт без flash работает, я поэтому и не приводил скрипт, так как он работает на ура, что то с flash не так я новичек и понять не могу если заходить закрывая explorer то он работает или ip меняешь тоже работает, а на обновлении не работает не че не понимаю flash же обновляется ? полностью ? или я чего то не знаю
о понял в чем дело дело в кеше его как то можно удалять ?
Проще дописать рандомный параметр к урлу. Потому что кэшем пользователя ты управлять не можешь.
darksranger
20.06.2007, 13:47
к урлу флэшки ? тогда глупый вопрос: как ? я вставляю flash через swfobject
?random=<% =GetRandomValue() %> нашел параметр который нада добавить. Но вот вопрос, при добавлении к запуску flash не чего не изменилось , обьясни пожалуста куда и как добавить
darksranger, чтобы что-то добавить, пост надо отредактировать, а не новый добавлять.
Рандомный параметр к тому урлу, результат запроса к которому кэшируется.
darksranger
20.06.2007, 15:25
вобщем то я уже совсем запутался :(
скрипт, как я сейчас выяснил выполняется, тоесть данные которые он меняет в файлах меняются, но не отображаются в flash :*( в чем проблема может быть ? в том что flash кеширована ? как тогда ее не кешировать ? пробовал подставлять рэндом в урлу flash не помогает
<script type="text/javascript">
var so = new SWFObject("flash/header.swf?&rnd= + Math.random() +","mymovie","100%","435","8","#3C3330");
so.write("flashcontent");
</script>
Так. Что выдает твой php скрипт, если его открывать в браузере ?
darksranger
20.06.2007, 16:21
наверно будет проще привести весь скрипт
<?php
ini_set('error_reporting',E_ALL);
ini_set('display_errors',1);
$number = @$_POST['amp;number'] or $number = '';
$file = 'flashanswer.xml';
$a = new DOMDocument('1.0','cp1251');
$aEntire=$a->firstChild;
$aEntire = $a->appendChild($a->createElement('entire'));
$aFlashanswer = $aEntire->appendChild($a->createElement('flashanswer'));
$aFlashanswer->setAttribute('shetchic',$number);
$a->save($file);
echo "<answer><content value=\"ok\"/></answer>";
?>
<?php
$tt = $_SERVER["REMOTE_ADDR"];
$filename = "flash/ip.txt";
$handle = fopen("$filename", "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
$ip = explode("|",$contents);
for($i = 0; $i < count($ip); $i++)
{
}
$yeah="ippole=Вы 1 раз на сайте Приветсвуем ваш IP=$tt";
if (in_array($tt, $ip)) {
$yeah="ippole=С возвращением ваш IP = $tt";
}
$fp = fopen("flash/yes.txt", "w+");
$test = fwrite($fp, "$yeah");
fclose($fp);
if ($yeah=="ippole=Вы 1 раз на сайте Приветсвуем ваш IP=$tt"){
$fp = fopen("flash/ip.txt", "a");
$test = fwrite($fp, "$tt|");
fclose($fp);
}
?>
в браузере он спокойно выполняется и в ip.txt, yes.txt все записывается нормально и правильно и при обновлении пишется и выполняется
Что-то я сомневаюсь, что <answer><content value=\"ok\"/></answer> - валидный XML...
darksranger
20.06.2007, 17:34
хм при выполнение просто скрипта не чего не пишет но все что нужно делает что посоветуешь ?
А кто и что должен писать...
Значит так, мил человек... Сходи-ка почитай сначала мануалы, а ? Ну ей богу надоело писать то, что люди умнее меня уже давно написали. И, что характерно, в интернет выложили.
darksranger
21.06.2007, 02:04
да вопрос не про скрипт, с ним все ок! проблема в том что, что-то кешируется ( по видимому flashka ) и пока не перезайдешь на сайт не обновляет данные flash ... вот в этом вопрос почему так происходит ( в опере ) отключил кеш все заработало, но вопрос в том что бы без отключки кеша все работало
Вы делаете sendAndLoad, а что-нибудь при этом посылаете на сервер? Ну хоть что-нибудь?
darksranger
21.06.2007, 03:07
stop();
System.useCodepage = true;
fscommand("fullscreen", false);
fscommand("allowscale", false);
fscommand("showmenu", false);
_focusrect = false;
function onReceive() {
shetchicc = "Количество посещений "+tt
tt=""
hit.header=""
if (receive.childNodes[0].childNodes[0].attributes.value == 'ok') {
}
}
//------------------------------------------------------------------------ обработка ХМЛ
function cLoading(success) {
if (success) {
c = cContent.firstChild;
cCounter = c.childNodes.length;
for (i=0; i<cCounter; i++) {
_root['new'+i] = new Object();
hit = _root['new'+i];
hit.type = c.childNodes[i].nodeName;
hit.header = c.childNodes[i].attributes['shetchic'];
i = cCounter
}
tt = hit.header
i = 0
write();
}
}
XML.prototype.ignoreWhite = true;
cContent = new XML();
cContent.onLoad = cLoading;
cContent.load("flashanswer.xml");
function write() {
heade = ++tt
endXML = new XML("&number="+escape(this.heade));
receive = new XML();
receive.onLoad = onReceive;
sendXML.sendAndLoad('fortest.php', receive);
}
вот собственно весь код посылаю колчество заходов
вначале читаю прибавляю 1 и отправляю
1) endXML или sendXML ? вы определитесь.
2) useCodepage что никак не обойтись? utf-8 рулит.
Я не уверен, что то что вы пытаетесь послать, вообще XML. Если не хотите разбираться с XML на сервере, создайте простой объект LoadVars и отправьте одну переменную. В функции onReceive не наблюдается флажка success - может сервер и возвращает что-то, а вы и не догадываетесь.
Дело в том, что он отдает клиенту совсем не XML. И никак не хочет решать задачу по частям, у него, видишь ли, оно в комплексе не работает.
darksranger
21.06.2007, 14:18
вобщем я проверял, flashka отправляет постоянно, все окей и при обновлении и при перезаходе все ок, скрипт & flash дружат! не дружит вот что, мне нада обновлять данные, тоесть при обновлении окна я хочу чтобы в flash записывалось что лежит в файлах, для этого использую лоад варс, но при обновлении она не записывает не чего в flash ( хотя данные в файлах уже изменились ! ) этот исходник не мой я его переписывал под себя кривовато потому как с flash дня четыре пытаюсь подружится :) поэтому не пинай сильно ! вобще я уже думал о том чтобы сделать как ты посоветовал ( про простой обьект ) но не вижу в этом смысла все работает ( по степенно разбираюсь в коде это мне на пользу ) не работает только обновление
ps мне сейчас главен не результат а причина :) хочу понять, почему в flash пишутся старые данные, не смотря на то что в файлах уже есть новые ! :(
Может в этом?
endXML = new XML("&number="+escape(this.heade));
receive = new XML();
receive.onLoad = onReceive;
sendXML.sendAndLoad('fortest.php', receive);
Это скорее всего неаккуратный копи-паст.
Значит так. Если ты утверждаешь, что все ок, кроме того, что пишутся старые данные, то дело с большой долей вероятности в кэшировании ответов. Чтобы избежать кэширования, надо запрашивать данные с разных адресов. Чтобы не приседать на серверной стороне, надо как-то формировать адрес, на который уйдет запрос, чтобы сервер запускал один и тот же скрипт и игнорировал уникальную часть запроса. Достигается это путем дописывания случайного параметра к УРЛу, который дергается для sendandlod'a. Еще вопросы есть ?
[telepat mode]
счас будет пост - все равно не работает
[/telepat mode]
Дело скорее всего в том, что this.heade относится к загружаемому xml и поэтому undefined.
Автор, попробуйте сохранять на сервере что из флеша приходит.
darksranger
21.06.2007, 15:21
решил проблему :) короче не совсем так как вы посоветовали. в общем решение проблемы оказалось простым приведу код
mytime2 = new Date();
sec = mytime2.getMilliseconds()
testing = 'flash/yes.txt?'+sec
loadVariables(testing, _root.ipp);
этот код получает данные с файла yes.txt в то поле в котором у меня не обновлялось
я просто подумал ( да да я умею думать :) иногда ) при чем здесь отправка ! если скрипт срабатывает каждый раз! значит проблема в получении данных а не в отправке и оказалось что браузеры просто кешировали yes.txt добавив милисикунды к путю файла проблема решается, шанс на то что обновление будет нажато в ту же милисекунду что и загружен сайт 1 к 1000 но и на этот случай можно будет дописать например значение секунд или сделать задержку и плюсануть еще раз милисекунды в общем смысла как таково не вижу в этом
ввел в поиск по хелпу random накнулся на процедуру которая мне переодически возращала одни и теже цыфры ... поэтому привезался к времени проверенный способ ( в программинге делаю иногда такой рэндом только не много сложнее чем здесь )
POST - запросы не кешируются броузером, если они корректны. Ваш способ вполне себе нормальный. Главное, что этой чехарды нет, когда непонятно что куда шлется, и неясно шлется ли вообще.
Разберетесь на досуге.
Маленький совет - ведите на сервере лог того, что приходит из флеша, поможет.
darksranger
21.06.2007, 15:39
ок спасибо ! :) как разтоки сейчас сяду за сам код, буду разбиратся !
лог сделаю обезательно, но попоже сейчас итак стоко всего в чем нада разобратся, голова уже кипит.
спасибо всем !
darksranger, это именно то, о чем я тебе говорил две страницы треда. Дописать к урлу запроса случайный параметр.
darksranger
21.06.2007, 16:24
"Дописать к урлу запроса случайный параметр." :)))) не сразу понял ! щас уже понял когда сделал :)))
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.