2010-11-27 30 views
0

J'ai un script PHP qui télécharge des vidéos de divers endroits. Les fichiers vidéo peuvent être n'importe où de 20mb à 100mb +Télécharger un fichier volumineux avec cURL en PHP - Page se bloque

J'ai PHP en train d'enregistrer le fichier vidéo dans un répertoire en utilisant CURLOPT_FILE. Cela fonctionne bien sans problèmes.

En raison des fichiers volumineux qui sont téléchargés, j'ai défini le délai d'expiration cURL sur 45 minutes pour permettre le téléchargement du fichier. J'ai également défini set_time_limit (0) pour que la page PHP continue le traitement une fois le téléchargement terminé. J'ai également défini ini_set ("memory_limit", "500M"); Une fois le téléchargement terminé, il doit renvoyer "Téléchargé", puis mettre à jour un enregistrement mysql indiquant que le fichier a été téléchargé. Ce qui se passe cependant, c'est que le fichier vidéo est téléchargé correctement par cURL mais il n'affiche pas "Téléchargé" dans le navigateur MAIS il met à jour mysql.

Pourquoi est-ce? J'ai essayé de trouver moi-même une solution, mais je n'arrive pas à savoir quel est le problème ici ...

+0

Est-ce que le navigateur lui-même abandonne la connexion, pouvez-vous envoyer des keep-alives? – Orbling

+0

Voir la réponse de yc pour ce que je demandais. – Orbling

Répondre

1

Si vous êtes dans un environnement de navigateur, le navigateur expirera après un certain temps, tout comme Arrêtez d'écouter la sortie du script, même si le script continue à s'exécuter. Cela varie selon les navigateurs, mais le nombre que j'ai vu est de 30 secondes.

Pour résoudre ce problème, vous devez envoyer la sortie (même si cela n'a pas de sens echo "<!--empty comment-->";) de temps en temps.

J'ai récemment eu un problème similaire, et je l'ai traité en ne sortant aucun contenu du script, et en interrogeant à la place du navigateur de temps en temps en utilisant AJAX pour voir si c'était fait. Ou, n'utilisez pas l'environnement du navigateur (car ce n'est pas idéal pour ce problème), et utilisez plutôt une invite de ligne de commande, car il n'a pas (à ma connaissance) ces délais.

+0

Comment puis-je envoyer une sortie pendant l'exécution du processus cURL? À ma connaissance, il doit d'abord faire l'exécution de cURL avant de sortir quoi que ce soit d'autre? –

+0

@papa_face oui, vous avez raison, seulement si vous êtes cURLing synchrone. Si vous essayez l'une de ces méthodes async documentées de cURLing, vous pouvez contourner ce problème: http://www.google.com/search?aq=1&oq=cURL+asynch&sourceid=chrome&ie=UTF-8&q=curl+asynchronous+php# sclient = psy & hl = fr & source = hp & q = curl + asynchrone + php + site: stackoverflow.com & aq = f & aqi = & aql = & oq = & gs_rfai = & pbx = 1 & fp = 94fb864a6b447b62 – Yahel

+0

D'autre part, je pense que la meilleure option est d'interroger tous les navigateurs si souvent pour vérifier si c'est fait, en vérifiant pour voir si la base de données MySQL a été mise à jour. – Yahel