2011-10-06 2 views
1

Je suis chargement d'un module Flex 4.5 (il est un fichier SWF) en utilisant un code PHP comme ceci:Comment charger un fichier SWF et des données supplémentaires dans la même requête?

$module = 'modules/'.$_GET['module'].'.swf'; 

if(!file_exists($module)) { 

    $module = 'error.swf'; 

} 

$size = filesize($module); 
$contents = file_get_contents($module); 

header('Content-Type: application/x-shockwave-flash'); 
header('Accept-Ranges: bytes'); 
header('Content-Length: '.$size); 

echo $contents; 

et il fonctionne très bien.

Maintenant, je veux obtenir des données supplémentaires pour charger et alimenter le module avec ces données dans un seul gestionnaire de requêtes, quelque chose comme:

private function requestHandler(response:???):void { 

    var data:Array = response as Array; 

    mySparkModuleLoader.load("", data[0] as ByteArray); 
    myController.load(data[1]); 

} 

je tentais de le faire avec AMFPHP mais le ByteArray semble être cassé ou quelque chose parce qu'il ne se présente pas, mais le reste des données est très bien:

return array(
    'hello world!', 
    new Amfphp_Core_Amf_Types_ByteArray(file_get_contents($module)) 
); 

créer peut-être une réponse multipart comme http://sun3.org/archives/107 et la manipulation?

Toute idée sera la bienvenue.

Répondre

1

OMG FONCTIONNE!

J'espère que ce sera utile à quelqu'un d'autre si:

Le service AMFPHP 2.0 RC1:

<?php 

class Services { 

    public function getModule() { 

     $path = dirname(__FILE__).'\..\..\Modules\Foo.swf'; 
     $ba = new Amfphp_Core_Amf_Types_ByteArray(file_get_contents($path)); 

     return array(
      $ba, 
      array(
       'colors' => array(
        'red', 
        'green', 
        'blue' 
       ), 
       'animals' => array(
        'dog', 
        'cat' 
       ) 
      ) 
     ); 

    } 

} 

Le service (en utilisant Flex SDK 4.5) gestionnaire:

private function resultHandler(event:ResultEvent):void { 

    var response:Array = event.result as Array; 

    moduleLoader.loadModule("http://some.random.url", response[0] as ByteArray); 
    initialData = response[1] as Array; 

} 

Et c'est tout!

+0

Hah, merci pour le partage. C'est presque ce dont j'ai besoin. Essayer de comprendre comment manipuler le ByteArray directement. Si je change quelque chose, je reçois des paquets malformés. Je suppose que quelque part dans le tableau d'octets est une longueur qui m'attrape ... zzz. –

Questions connexes