Zurück   Flashforum > Flash und Server > Flash Remoting

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 24-07-2005, 15:51   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2005
Beiträge: 19
Question Aufruf der onStatus Methode von php aus forcieren

Hallo,

ich würde gerne von php aus "steuern" können, ob entweder die onResult() oder die onStatus() Methode in Flash zu einem zuvor getätigten Funktionsaufruf als Antwort angesprochen wird.

Szenario:

Es soll eine Datei mittels AMFPHP (neuste Version) und einem php 4 (4.4.0 auf Win XP) Skript auf dem Server (Apache 1.3.33) abgespeichert werden. Sagen wir nun mal, eine Datei mit demselben Namen existiert schon auf dem Server, dann wird dies mittels 'file_exists' bemerkt.
Nun soll die bestehende Datei aber nicht überschrieben werden, sondern dem Benutzer in Flash dieser Sachverhalt mittels einer Meldung "Diese Datei existiert schon, ..." mitgeteilt werden.
Da der Speicherungsversuch somit fehlgeschlagen ist, möchte ich dies
in der OnStatus() Methode handlen.

Nur: Wie kann ich von php aus eine solche Meldung zurückgeben, und dann gleichzeitig noch angeben, dass die onStatus() Methode diese Meldung entgegennehmen soll ? Sonst wird ja einfach die onResult() Methode
angesprochen, da ja im Grunde kein fehlerhaftes Verhalten auf php Seite
vorgefallen ist...
Irgendwas mit Werfen einer Exception und dieser dann den gewünschten Error Text mit auf den Weg geben, aber wie geht das genau ?

Danke für Eure Hilfe.
Grüsse
rivella50
rivella50 ist offline   Mit Zitat antworten
Alt 25-07-2005, 12:12   #2 (permalink)
-
 
Registriert seit: Jul 2003
Beiträge: 714
Warum willst du es so kompliziert machen.

Ich würde einfach in der PHP – Methode so was machen:

PHP-Code:
If("Datei existiert schon") {
    return 
false;
} else {
    return 
true;

Dann fängst du den Boolean-Wert in der Ergebnisverarbeitungsfunktion, die du in deinem RelayResponder-Objekt, für diese Remotemethode, definiert hast einfach ab.

ActionScript:
  1. // Beispiel
  2. function dateiExistiert (ergebnis:ResultEvent) {
  3.     if (!ergebnis) {
  4.         trace("Datei existiert schon!");
  5. } else {
  6.     // mache was wen Datei noch nicht existierte
  7. }
  8. }

Die Fehlerbehandlungsmethode ist doch nur dafür gedacht um einen "wirklichen" Fehler abzufangen.
Ob das mit dem "Werfen einer Exception" so einfach klappt weiß ich nicht.

Aber wenn du "Fehler" (bzw. Ergebnisse) abfängst, warum willst du es dann auf einmal irgendwie besonders machen?

cu messingfeld
messingfeld ist offline   Mit Zitat antworten
Alt 26-07-2005, 21:11   #3 (permalink)
Neuer User
 
Registriert seit: Jul 2005
Beiträge: 19
hi messingfeld,

klar kann man das so machen, das war aber nur ein exemplarisches
beispiel. beim speichern von content können ja noch jede menge
andere probleme auftreten (keine schreibrechte, platte voll, ...) und ich möchte ja nicht für jeden dieser fälle einen aufruf von actionscript aus tätigen.
von dem her wäre ein handling dieser möglichen fehlerfälle in php
und anschliessendem
PHP-Code:
trigger_error("file already exists!");
return; 
vorzuziehen. mittels trigger_error klappt schon mal der wechsel in die onStatus() methode, nur die fehlermeldung krieg ich irgendwie nicht aus dem FaultEvent objekt...

gruss
rivella50
rivella50 ist offline   Mit Zitat antworten
Alt 26-07-2005, 22:27   #4 (permalink)
-
 
Registriert seit: Jul 2003
Beiträge: 714
Zitat:
Zitat von rivella50
und ich möchte ja nicht für jeden dieser fälle einen aufruf von actionscript aus tätigen.
Wer sagt das denn?
Ich nicht! Welchen Sinn hätte das denn? Ich glaube wir reden einander vorbei.

Ich meine nur ob du deine "Fehler"-Ereignisse in der Ergebnisverarbeitungsfunktion abfängst oder in der Fehlerverarbeitungsfunktion ist ist doch Hose wie Jacke.

Aber eine Remotingmethode musst du aus Flash doch auch aufrufen, oder kennst du irgendwelche Tricks die ich nicht kenne.

Aber jetzt verstehe ich den wirklichen Sinn, den du verfolgst.

Weil für mich der Fehler: "Datei existiert schon!"
Kein Fehler ist, sondern einfach ggf. ein Loch inder Programmierung ist, der sowas zulässt. Also Fehler des Programmiers, bzw des Users.
Darunter würde evtl. auch für mich der "Fehler" fallen: "Keine Schreibrechte!"

Die Operation hat ja geklappt, warum sollte Flash einen Fehler erwarten.
Ich würde es nach wie vor in der Ergebnisverarbeitungsfkt. abfangen und den User auf SEIN "Fehlverhalten" hinweisen.


Aber den Fehler:"Platte voll!"
würde ich über trigger_error(); abfangen.

Aber den Text von trigger_error() kannst du doch ganz einfach abfangen:

ActionScript:
  1. // fehlerhaft ist im RelayResponder
  2. // als Fehlerverarbeitungsfunktion definiert
  3. function fehlerhaft(meinFehler:FaultEvent) {
  4.     trace("Fehler: "+meinFehler.fault.faultstring);
  5.     trace("Fehlercode: "+meinFehler.fault.faultcode);
  6. }

Ich hoffe dir ist geholfen.

cu messingfeld
messingfeld ist offline   Mit Zitat antworten
Alt 27-07-2005, 11:17   #5 (permalink)
Neuer User
 
Registriert seit: Jul 2005
Beiträge: 19
Cool

hi messingfeld,

also, jetzt verstehen wir uns

ich hab das also probiert, mittels

ActionScript:
  1. trace("Fehler: "+meinFehler.fault.faultstring);
  2. trace("Fehlercode: "+meinFehler.fault.faultcode);

und

PHP-Code:
trigger_error("file already exists!"irgend_eine_codenummer); 
return; 
den text aus dem fehler zu bekommen, stand immer 'undefined' drin...
ich schau's mir aber so nochmals an, wenn du dir sicher bist, dass es mit
faultstring und faultcode funktionieren sollte...
sonst muss ich ja nix codieren, oder ?

danke für deine hilfe.
grüsse
rivella50
rivella50 ist offline   Mit Zitat antworten
Alt 27-07-2005, 14:15   #6 (permalink)
-
 
Registriert seit: Jul 2003
Beiträge: 714
Zitat:
Zitat von rivella50
PHP-Code:
trigger_error("file already exists!"irgend_eine_codenummer); 
return; 
Bei trigger_error() darfst du als Fehlercode nur E_USER_* verwenden, sonst nichts, oder du lässt es ganz weg.

Wenn ich trigger_error() unter PHP 4.3.11 laufen lassen, bekomme ich dann Fehlertext + Fehlercode (256, 512 oder 1024) über:

ActionScript:
  1. trace(meinFehler.fault.faultstring);
  2. trace(meinFehler.fault.faultcode);

Wenn ich aber das gleiche unter PHP 5.0.4 laufen lassen, kommt bei dem Fehlercode nur immer undefined.
Den Text bekomme ich immer.

Das ist das einzigste was ich nicht verstehe.

Sonst probiere es mal so:
ActionScript:
  1. for (var i in meinFehler.fault) {
  2.         trace(i+":"+meinFehler.fault[i]);
  3.     }

cu messingfeld
messingfeld ist offline   Mit Zitat antworten
Alt 27-07-2005, 21:32   #7 (permalink)
Neuer User
 
Registriert seit: Jul 2005
Beiträge: 19
Unhappy

hmmmmm, das ist ja schon sehr merkwürdig.
ich hab nun mal alle drei E_USER_* probiert, und auch mit ganz weglassen.
dann hab ich auch noch die abfrage aller elemente mittels der for schleife
versucht -> immer dasselbe resultat:

echoString status
__type:undefined
__detail:undefined
__faultstring:undefined
__faultcode:undefined

muss ich bei meiner methodTable deklaration noch was ändern ?
momentan sieht sie so aus:
PHP-Code:
$this->methodTable = array(
      
// name of the function
      
"echoString" => array(
         
"description" => "",
         
"access" => "remote",
         
// describe the argument to be passed
         
"arguments" => array (array("name" => "string""required" => true"type" => "string"))
      )
}; 
apache: 1.3.33
php 4.4.0
amfphp ist neuste version

gruss
rivella50
rivella50 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 03:05 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele