Je voudrais télécharger un fichier à partir d'un formulaire html, l'envoyer en PHP et le charger en mémoire, sans passer par l'écriture dans un fichier. Est-il possible de faire un téléchargement de fichier et de le garder en mémoire, ou dois-je l'écrire dans un fichier?PHP File upload to memory
Répondre
Je ne pense pas que ce soit possible maintenant. Vous ne pouvez pas utiliser php: // input avec enctype = "multipart/form-data", ce qui exclut l'ouverture du fichier à partir d'un flux. Si vous allez sur la route de publication, vous pouvez seulement utiliser la variable $ _FILE, qui ne contient aucune donnée binaire, juste le pointeur vers le fichier sur le disque.
Il semble que xforms aidera (http://www.ibm.com/developerworks/xml/library/x-xformstipuploadphp/index.html), mais c'est même dans Firefox 3.5. Il nécessite un plug-in, ce qui est un tueur d'affaire pour moi.
Attendez-vous que les gens puissent télécharger des fichiers en utilisant un navigateur Web? Parce que vous pouvez avoir de la difficulté à trouver des navigateurs qui prennent en charge PUT. –
http://stackoverflow.com/questions/165779/are-the-put-delete-head-etc-methods-available-in-most-web-browsers –
Une alternative consiste à utiliser une implémentation côté serveur de XForms (par exemple l'open source http://www.orbeon.com/). De cette façon, vous pouvez prendre en charge tous les navigateurs sans nécessiter l'installation d'extensions, et vous pouvez gérer le téléchargement de la manière que vous décrivez. Bien sûr, à mon humble avis cela n'a de sens que si vous avez besoin d'autres fonctionnalités de XForms, en plus du téléchargement de fichiers. – avernet
Puisque PHP ne gère pas les requêtes HTTP elles-mêmes (c'est le travail du serveur web), je ne peux pas imaginer que cela soit possible. Ce serait génial si quelqu'un pouvait me prouver le contraire.
certainement pas possible en utilisant les procédures PHP standard. – dusoft
PHP a un paramètre "upload_tmp_dir", qui contrôle où vont les fichiers téléchargés. Donc, il semble qu'il a un certain contrôle. –
Ouais c'est intéressant. J'imagine que ça dit juste à Apache, "yo, mets ces gars là!" – Kai
L'option PUT est cool. Si vous voulez utiliser POST et $ _FILES, je pense que le plus proche que vous pourriez obtenir serait de pointer upload_tmp_dir
sur un disque virtuel.
Je suis cool avec put, est-ce que quelqu'un a un exemple complet de faire cela avec put? – CLJ
Http put est facile en PHP.
<?php
$f = fopen('php://input','r');
$content ='';
while(!feof($f)){
$content .= fread($f,8192);
}
?>
$ content est le contenu du fichier. N'oubliez pas de configurer d'abord le serveur Web pour gérer la requête HTTP PUT.
je fait face au problème récemment et enfin utiliser la solution suivante: (pas sûr si elle est réellement résoudre le problème, je vais vraiment apprécier votre suggestion)
côté client,
tête d'envoi avec " Content-Type: application/octet-stream; " au lieu de "multipart/form-data"
de sorte que le fichier de téléchargement ne sera pas enregistré dans temp dir sur le serveur.
prendre des Objective-C Code par exemple ios:
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"your server address"]];
[request setTimeoutInterval:30];
[request setHTTPMethod:@"POST"];
// set Content-Type in HTTP header
NSString *contentType = [NSString stringWithFormat:@"application/octet-stream;"];
[request setValue:contentType forHTTPHeaderField: @"Content-Type"];
// post body
NSMutableData *body = [NSMutableData data];
//yourData is typed NSData here
[body appendData:yourData];
// setting the body of the post to the reqeust
[request setHTTPBody:body];
// set the content-length
NSString *postLength = [NSString stringWithFormat:@"%d", [body length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id result) {
success(result);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id result){
failure(error, result);
}];
[operation start];
côté serveur,
utilisation "php: // input" pour récupérer le fichier sous forme de données brutes (notez que php: // entrée ne fonctionnera pas sur "multipart/form-data")
par exemple: $data = file_get_contents('php://input');
$ data ici sera le fichier téléchargé.
Dans notre cas, la fréquence de téléchargement de fichiers est assez élevée. Il est donc préférable de réduire le fonctionnement du système de fichiers.
Vous pouvez pointer le dossier de téléchargement vers un volume tmpfs si sous Linux, il sera en mémoire, même si vous utilisez l'interface du système de fichiers.
- 1. File Upload Dans Zend
- 2. upload PHP recherche de virus
- 3. Grab File Upload ASP Objet Textbox Texte avec jQuery
- 4. FCKEditor File Upload - Ne fonctionne pas sur le serveur de production - "Invalid File"
- 5. PHP File Upload ... fichiers disparaissent dans le grand vide ... où personne ne peut les entendre crier
- 6. MultiValueDictKeyError En utilisant Appengine SDK et Django pour File Upload
- 7. File upload tue rails application et le serveur
- 8. Struts 2 File Upload Problèmes de configuration Interceptor
- 9. iphone photo upload - PHP & bibliothèque Jqtouch
- 10. javascript to php question
- 11. upload photo avec codeigniter
- 12. Comment extraire plusieurs valeurs du champ select en utilisant Commons File Upload?
- 13. Struts2-File Upload Interceptor: après le téléchargement du nom de fichier n'apparaît pas
- 14. xsl to php array
- 15. php Object to String
- 16. Memory Leak - iPhone
- 17. In-Memory SQL-CE
- 18. WCF Memory Performance InstanceContextMode
- 19. VB6 Memory Leak
- 20. Openfire Java Memory
- 21. PHP File Directory - dossier parent $ _SERVER ['DOCUMENT_ROOT']
- 22. Velocity CTP2 Serious Memory Bogue
- 23. ASP.Net Ajax Photo Upload
- 24. javascript upload de fichier
- 25. Comment envoyer une autre variable avec FileReference Upload?
- 26. Téléchargement FTP en PHP
- 27. Importation Processus maxing SQL memory
- 28. Exception Subsonic out of memory
- 29. Qu'est-ce que "tagged memory"?
- 30. Iphone Memory Leak Bibliothèque JSON
Il semble trop de puissance requise pour l'humble PHP. – Ismael