Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как определить что PHP скрипт отработал (http://www.flasher.ru/forum/showthread.php?t=139272)

tkaChuck 27.04.2010 08:56

как определить что PHP скрипт отработал
 
Здравствуйте.
У меня такой вопрос. Есть эти файлы
Код:

init1.txt, init2.txt.. initN.txt
и swf в ходе работы постоянно их обновляет.

И есть резервные файлы
Код:

reservedInit1.txt, reservedInit2.txt.. reservedInitN.txt
которыые представляют собой резервные копии

И есть кнопка revert, которая заменяет 'эти' файлы 'резервными' и перезапускает флешку. это достигается с помощью следущего скрипта
PHP код:

<?
copy 
('reservedInit1.txt','init1.txt');
copy ('reservedInit2.txt','init2.txt');
..
copy ('reservedInitN.txt','initN.txt');
?>

То есть, мы вызываем этот скрипт и перезапускаем флешку. Но она успевает раньше чем пхп. И происходит то, что грузятся старые файлы, потом заменяются на резервные, но загрузились-то старые. Затем файлы типа обновляются, и весь revert коту под хвост.

Вопрос: как мне определить, что резервные файлы уже скопировались, а только потом перезапускать?

То есть может быть, я могу следить, завершились ли операции с файлами на сервере? и даже если бы я мог, как я сообщу об этом обратно в swf? Единственное что приходит мне в голову - просто подождать несколько секунд, но должно быть более правильное решение.

BeDLiNt 27.04.2010 09:33

Эти методы же синхронные. Сначала делайте ваши copy потом запускайте флешку. А проблема скорее всего в кешировании в браузере. Поищите по форуму, не раз уже обсуждалось.

tkaChuck 27.04.2010 18:13

синхронные, и что это нам дает. вот я допустим сделаю

Код AS3:

var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("revert.php"));
restart();

понятно, что рестарт произойдет раньше чем отработает revert.php. а надо чтобы произошел ПОЗЖЕ. а при каких делах тут кеширование?

i.o. 27.04.2010 18:15

в PHP нужно добавить в конце echo, а во флэшке поставить слушатель на окончание загрузки скрипта. И будет счастье )

djyamato 28.04.2010 00:46

Цитата:

Сообщение от i.o. (Сообщение 904184)
в PHP нужно добавить в конце echo, а во флэшке поставить слушатель на окончание загрузки скрипта. И будет счастье )

Верно !!

Отдайте из скрипта флэшке ответ что мол "я отработала" !

echo 'otvet=im_done'

Для AS2 будет это так

Код AS1/AS2:

var senderLV=new LoadVars();
var receiverLV=new LoadVars();
var scriptPath="myScript.php";
senderLV.sendData="мои передаваемые скрипту данные";
 
receiverLV.onLoad=function(){
  trace(this.otvet);
}
 
senderLV.sendAndLoad(scriptPath,receiverLV,"POST");


Nt9142 28.04.2010 12:26

Приветствую!
2 tkaChuck:
Судя по коду и ТЗ - данные однозначно кешируются, также, верно подметил, restart выполнится ранее, сейчас редактора под рукой нет, но надеюсь, что код будет работать:

ребят, где ошибся синтаксически - просьба не кричать, ибо сейчас Дельфист
Код AS3:

//За основу взял твой примерочный код и немного его дополнил
var RandNum: String //уникальная стринга
var loader : URLLoader = new URLLoader();
loader.addEventListener( Event.LOAD, PostLoad) //Сейчас не вспомню, точно ли EVENT.LOAD
//но вешаем слушателя на событие "когда загрузится"
 
RandNum = Math.random ( 10000 );// создаем уникальную строку
RandNum +=  '_' + Math.random ( 10000 );
loader.load( new URLRequest( "revert.php?nocache=" + RandNum )); // запрос будет всегда уникальным
//а значит забываем, что такое кеширование
 
private function PostLoad (){
// еще надо удалить слушателя - глянь removeEventListener
 
restart();
 
// и дальнейшие соображения
}

В этом коде(если убрать синтаксические ошибки :) ) реализована пральная загрузка без кеширования

djyamato 28.04.2010 19:19

Цитата:

Сообщение от tkaChuck (Сообщение 903959)
PHP код:

<?
copy 
('reservedInit1.txt','init1.txt');
copy ('reservedInit2.txt','init2.txt');
..
copy ('reservedInitN.txt','initN.txt');
?>



PHP код:

if (copy ('reservedInit1.txt','init1.txt')){
echo 
'otvet=скопировано';
} 

вот так можно попробовать

Nt9142 30.04.2010 11:41

чтобы избежать проблем с кодировкой, в ответах(otvet=скопировано) лучше использовать латынь(request=sucess), или же прописать поддержку кириллицы во Flash=)
немного накалябал пхп, объединив идею djyamato и задачу tkaChuck)
PHP код:

$MaxInits = 5;// количество твоих инитов

//Описываем функцию, которая будет копипастить тексты
function CopyPaste(){
  
//проходим циклом по каждому иниту
  
for( $i=1; $i<$MaxInits+1; $i++){
    
//если копирование хоть раз пройдет ошибочным
    
if( ! copy ( 'reservedInit' . $i . '.txt' , 'init' . $i . '.txt' ) )
      
//вернем false
      
return false;
  }
  
/*если доберемся до этого места - значит все скопированно успешно
  возвращаем true*/
  
return true;
}
if( 
CopyPaste() )
  echo 
'request=sucess';
else
  echo 
'request=error'; 

а далее, дополнить мой AS3-код проверкой полученного ответа)

tkaChuck 30.04.2010 15:49

отлично. большое спасибо, товарищи!

таким образом, ответ на мой вопрос и правда лежит в
PHP код:

echo 'request=sucess' 

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

типа чтото вроде
Код AS3:

 addEventListener(ПРИШЛО_ИЗВЕСТИЕ, phpResponseHandler);

Добавлено через 45 секунд
но откуда возьмется в swfe событие по поводу того что там генерит пхп

Добавлено через 16 часов 14 минут
Цитата:

Сообщение от Nt9142 (Сообщение 905003)
а далее, дополнить мой AS3-код проверкой полученного ответа)

именно это я и имею ввиду. как это сделать

Nt9142 05.05.2010 12:52

Вложений: 1
Доброго времени суток, сейчас попробую набросать код и приложить в аттач.
Сорри за отсутствие)

Цитата:

но откуда возьмется в swfe событие по поводу того что там генерит пхп
будем смотреть, что мы получили в ответе=)

наконец-то добрался до редактора - высылаю код и исходники в аттачменте


и код:
Код AS1/AS2:

package {
        import flash.display.Sprite;
        import flash.net.*;
        import flash.events.*;
 
        public class main extends Sprite{
                //loader объявляю в классе - ибо чтобы он был виден и в PostLoad
                var loader : URLLoader = new URLLoader();
 
                public function main(){
                        //За основу взял твой примерочный код и немного его дополнил
                        var RandNum: String //уникальная стринга
                        loader.addEventListener( Event.COMPLETE, PostLoad);
                        RandNum = Math.round( Math.random() * 100000000 ).toString();// создаем уникальную строку
                        // "revert.php?nocache="
                        loader.load( new URLRequest( "http://127.0.0.1/revert.php?nocache=" + RandNum )); // запрос будет всегда уникальным
                        //а значит забываем, что такое кеширование
                }
 
                private function PostLoad (evt:Event){
                        loader.removeEventListener( Event.COMPLETE , PostLoad );
                        if (loader.data == "sucess"){
                                trace('замена успешна - здесь должен быть дальнейший код');
                                // ...
                        } else {
                                trace('замена произведена с ошибкой - здесь должен быть дальнейший код');
                                // ...
                        }
                }
 
        }
 
}

PHP код:

<?php
error_reporting
( 0 );
$MaxInits = 5;// количество твоих инитов

//Описываем функцию, которая будет копипастить тексты
function CopyPaste(){
  
//проходим циклом по каждому иниту
  
for( $i=1; $i<$MaxInits+1; $i++){
    
//если копирование хоть раз пройдет ошибочным
    
if( ! copy ( 'reservedInit' . $i . '.txt' , 'init' . $i . '.txt' ) )
      
//вернем false
      
return false;
  }
  
/*если доберемся до этого места - значит все скопированно успешно
  возвращаем true*/
  
return true;
}
if( 
CopyPaste() )
  echo 
'sucess';
else
  echo 
'error'; 
?>



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

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