2010-01-20 3 views
1

Pour un projet PHP sur lequel je travaille, en mettant l'accent sur l'homogénéité des données, une certaine structure de répertoires peut être gérée.Copier un répertoire d'un serveur Web vers un lecteur réseau mappé

Une fois qu'un utilisateur a terminé un processus de création d'objet (je ne vous dérangerai pas avec tous les détails du projet), cette structure de répertoire doit être copiée sur un lecteur réseau mappé.

Étant donné que les utilisateurs peuvent avoir mappé networkdrive à un autre lecteur, j'utilise javascript (FileSystemObject) pour obtenir le lecteur de lettre.

Tout est OK. Mais maintenant vient la partie délicate. Comment puis-je copier ma structure de répertoires, gérée sur le serveur web par la webapp que je construis, sur ce networkdrive?

Je sais que je peux utiliser le FSO pour créer de nouveaux répertoires, mon problème est de savoir comment passer la structure de répertoire récursive de PHP en javascript.

Répondre

1

Étant donné que vous ne pouvez pas copier une structure de répertoires à l'aide du protocole HTTP, vous devez créer un objet d'assistance qui conservera les informations de répertoire. J'utiliserais le tableau exporté par JSON vers JS. la structure Array serait comme ceci:

array(1) { 
    ["/"]=> 
    array(5) { 
    ["dir1"]=> 
    array(3) { 
     ["dir1_1"]=> 
     array(1) { 
     ["file1.txt"]=> 
     string(30) "http://domain/dir1_1/file1.txt" 
     } 
     ["file1.txt"]=> 
     string(28) "http://domain/dir1/file1.txt" 
     ["file2.txt"]=> 
     string(34) "http://domain/dir1/file2.txt" 
    } 
    ["dir2"]=> 
    array(1) { 
     ["file1.txt"]=> 
     string(28) "http://domain/dir2/file1.txt" 
    } 
    ["file1.txt"]=> 
    string(23) "http://domain/file1.txt" 
    ["file2.txt"]=> 
    string(23) "http://domain/file2.txt" 
    ["file3.txt"]=> 
    string(23) "http://domain/file3.txt" 
    } 
} 

En option, vous pouvez assable les URL à partir des valeurs clés pour sauver un peu de trafic, mais je pense que ce n'est pas le cas, vous en avez besoin. Une fois l'objet dans votre JS, copiez les fichiers un par un.

0

HTTP ne définit rien comme une "structure de répertoire"; tout mappage des réponses HTTP au système de fichiers est au mieux accidentel.

0

? Il n'y a pas de FileSystemObject en Javascript ni d'ECMAscript - c'est une extension jscript.

Je suppose que vous essayez de développer sur un système d'exploitation MS Windows (il aurait été utile si vous l'aviez mentionné).

De plus, il y a beaucoup de raisons pour lesquelles un fichier jscript téléchargé depuis un serveur ne devrait pas pouvoir accéder au système de fichiers local - les paramètres par défaut de MSIE ne le permettent pas et ne fonctionneront pas dans un autre navigateur.

Où se trouve la structure de répertoire? Sur le serveur web? Sur le navigateur client? Votre question sur la façon de passer les détails de PHP à jscript implique plutôt l'ancien - alors pourquoi ne pas copier les fichiers en utilisant PHP? Ce sera beaucoup plus simple que de l'implémenter sur le client même sans tenir compte des problèmes de sécurité.

Mais pour répondre à votre question:

$i=0; 
print "<script>\nvar filesToCopy=New Array();\n"; 
foreach ($file_to_copy as $f) { 
    print "filesToCopy[$i]='$f';\n"; 
    $i++; 
} 
print "your_file_copy_js(filesToCopy);\n</script>\n"; 

C.

0

Je l'ai compris. J'ai récursivement lu ma structure de répertoire, construis un tableau, bouclé par ce tableau et ai mis en place une fonction javascript qui peut utiliser le FileSystemObject pour créer de nouveaux répertoires. Le seul inconvénient est que je n'ai pas été en mesure d'ajouter du contenu aux fichiers. Mais ce n'est pas vraiment un problème. Petr Peller, merci pour votre suggestion, c'était la piste de ma solution.

Questions connexes