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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

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

Регистрация: Nov 2005
Сообщений: 48
По умолчанию как определить что 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? Единственное что приходит мне в голову - просто подождать несколько секунд, но должно быть более правильное решение.

Старый 27.04.2010, 09:33
BeDLiNt вне форума Посмотреть профиль Отправить личное сообщение для BeDLiNt Найти все сообщения от BeDLiNt
  № 2  
Ответить с цитированием
BeDLiNt
 
Аватар для BeDLiNt

Регистрация: Mar 2008
Адрес: Moscow
Сообщений: 311
Отправить сообщение для BeDLiNt с помощью ICQ Отправить сообщение для BeDLiNt с помощью Skype™
Эти методы же синхронные. Сначала делайте ваши copy потом запускайте флешку. А проблема скорее всего в кешировании в браузере. Поищите по форуму, не раз уже обсуждалось.
__________________
2+2=5

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

Регистрация: Nov 2005
Сообщений: 48
синхронные, и что это нам дает. вот я допустим сделаю

Код AS3:
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("revert.php")); 
restart();
понятно, что рестарт произойдет раньше чем отработает revert.php. а надо чтобы произошел ПОЗЖЕ. а при каких делах тут кеширование?

Старый 27.04.2010, 18:15
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 4  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
в PHP нужно добавить в конце echo, а во флэшке поставить слушатель на окончание загрузки скрипта. И будет счастье )

Старый 28.04.2010, 00:46
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 5  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Цитата:
Сообщение от i.o. Посмотреть сообщение
в 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");

Старый 28.04.2010, 12:26
Nt9142 вне форума Посмотреть профиль Отправить личное сообщение для Nt9142 Найти все сообщения от Nt9142
  № 6  
Ответить с цитированием
Nt9142

Регистрация: Apr 2010
Адрес: Kemerovo
Сообщений: 11
Приветствую!
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();
 
// и дальнейшие соображения
}
В этом коде(если убрать синтаксические ошибки ) реализована пральная загрузка без кеширования


Последний раз редактировалось Nt9142; 30.04.2010 в 11:51.
Старый 28.04.2010, 19:19
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 7  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Цитата:
Сообщение от tkaChuck Посмотреть сообщение
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=скопировано';

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

Старый 30.04.2010, 11:41
Nt9142 вне форума Посмотреть профиль Отправить личное сообщение для Nt9142 Найти все сообщения от Nt9142
  № 8  
Ответить с цитированием
Nt9142

Регистрация: Apr 2010
Адрес: Kemerovo
Сообщений: 11
чтобы избежать проблем с кодировкой, в ответах(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-код проверкой полученного ответа)


Последний раз редактировалось Nt9142; 30.04.2010 в 11:54. Причина: синтаксис, в т.ч. и русского языка:)
Старый 30.04.2010, 15:49
tkaChuck вне форума Посмотреть профиль Отправить личное сообщение для tkaChuck Найти все сообщения от tkaChuck
  № 9  
Ответить с цитированием
tkaChuck

Регистрация: Nov 2005
Сообщений: 48
отлично. большое спасибо, товарищи!

таким образом, ответ на мой вопрос и правда лежит в
PHP код:
echo 'request=sucess' 
но есть одно но. чтото я вообще не могу представить как это выглядит синтаксически. и как это искать тоже неясно)

типа чтото вроде
Код AS3:
 addEventListener(ПРИШЛО_ИЗВЕСТИЕ, phpResponseHandler);
Добавлено через 45 секунд
но откуда возьмется в swfe событие по поводу того что там генерит пхп

Добавлено через 16 часов 14 минут
Цитата:
Сообщение от Nt9142 Посмотреть сообщение
а далее, дополнить мой AS3-код проверкой полученного ответа)
именно это я и имею ввиду. как это сделать

Старый 05.05.2010, 12:52
Nt9142 вне форума Посмотреть профиль Отправить личное сообщение для Nt9142 Найти все сообщения от Nt9142
  № 10  
Ответить с цитированием
Nt9142

Регистрация: Apr 2010
Адрес: Kemerovo
Сообщений: 11
Доброго времени суток, сейчас попробую набросать код и приложить в аттач.
Сорри за отсутствие)

Цитата:
но откуда возьмется в 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
);
$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'
?>
Вложения
Тип файла: rar Loaderr.rar (7.8 Кб, 83 просмотров)


Последний раз редактировалось Nt9142; 05.05.2010 в 15:43. Причина: Атач
Создать новую тему Ответ Часовой пояс GMT +4, время: 23:21.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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