Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/12/2006, 16h02   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 33
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 33
Points : 12
Points : 12
Par défaut [Upload] Fsocket ou Fopen ?

Bonjour,


Dans un script je suis amené à télécharger des fichiers zip pour les décompresser sur mon serveur. Des utilisateurs se plaignent que quand le fichier est gros ca passe pas forcement, ou suivant le serveur web où le script est placé ca plante. Je viens donc de le refaire en utilisant cette fois si un socket sur le port 80.

Ai-je fais le bon choix? quelles sont les nouveaux inconveniants/avantages auquel je vais être confronté? la communauté php a été assez évasive sur ce point j'ai pas eu trop d'informations.
Temps de connexion plus long ?
Timeout plus intéréssant (tardif)?

En règle générale quelles sont les config utilisées?

Merci pour vos réponses.
saint-pere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2006, 20h37   #2
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
Je te conseil la méthode cURL, qui est la plus simple, propre et rapide en tout point.

Maintenant, je pense que tu vas tombé sur des configurations trop diverse (free.fr par exemple) qui empêche l'exécution du script plus de 30 secondes, alors évidements, il peut y avoir des problèmes.

Pour répondre à tes questions, tu as fait le bon choix par rapport à un fopen() classique: oui, car fsockopen() permet l'ajout de header qui peuvent te permettre de télécharger (de simulé un navigateur web) là ou fopen() ne passera pas.
Les temps de connection soit tout aussi rapide qu'avec fopen, mais si tu cherches à mieux faire, utilise cURL qui lui est plus performant (nettement visible).
fsockopen(), de mémoire d'utilisateur, ne prend pas les timeouts, (bug???) donc il est fort possible que le script fonctionne plus longtemps pour des résultats nulle.
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2006, 20h08   #3
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 33
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 33
Points : 12
Points : 12
Merci pour ta réponse, je ne connais pas curl (juste de nom) je vais me renseigner sur cet outil et si j'ai des soucis je repasserai te voir.
saint-pere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2006, 07h10   #4
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
Citation:
Envoyé par juJuv51
fsockopen(), de mémoire d'utilisateur, ne prend pas les timeouts, (bug???) donc il est fort possible que le script fonctionne plus longtemps pour des résultats nulle.
fsockopen() permet de mettre des timeout sur la connexion et sur le flux une fois celui-ci ouvert.

Pour le timeout de connexion: le dernier argument de la fonction fsockopen()

Pour un timeout sur le flux: stream_set_time_out()

fsockopen sera plus rapide que Curl mais ce dernier est plus complet et plus simple à mettre en oeuvre pour des connexions complexes (redirections, https, gestion des errreurs etc...)

Si tu n'es pas à une demi seconde près, Curl sinon fsockopen().
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2006, 10h57   #5
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 33
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 33
Points : 12
Points : 12
bon je me suis remis sur ce script.. j'ai refais la même chose avec CURL, mais à mon grand désespoir je suis encore confronté à des limites de temps/taille. Je veux toujours transférer des archives gzip d'un serveur web (variable..) vers mon serveur. Si je précise celà c'est pour écarter de suite la solution FTP, le transfert doit se faire via le protocole HTTP.

CURL me revoit un timeout de 30 secondes atteint, je pensais que cette librairie permettait de passer outre les limitations d'upload et de timeout spécifiées dans le php.ini. J'ai rien compris ou il faut rajouter des paramètres à CURL pour qu'il ne s'arrête pas?


Merci pour vos réponses, voir pour vos bouts de code qui fonctionnent sur l'upload de fichier binaire de 5 à 10Mo.

SP
saint-pere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 16h42   #6
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
Montre tes options CURL?
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2006, 08h40   #7
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 33
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 33
Points : 12
Points : 12
J'utilise un apache configuré par défaut (easyphp 1.8) auquel j'ai juste activé le module CURL.

Voici mon code qui fonctionne correctement sauf en Safe Mode :s, si vous savez comment faire en sorte qu'il fonctionne à tous les coups

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
	# Copier d'un fichier binaire distant
	function copyRemote($src,$dest)
	{
	//  On essaye de forcer les limites du serveur..
 
		@set_time_limit(0);
		@max_execution_time(0);
 
		// Si CURL est installé on l'utilise c'est mieux que les sockets.
		if (function_exists('curl_init'))
		{
			$curl = curl_init();
			curl_setopt($curl, CURLOPT_URL, $src);
			curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
			curl_setopt($curl, CURLOPT_HEADER, false);
			curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 0);
			$info = curl_exec($curl);
			curl_close($curl);
		}else{
			//  Sinon on utilise Fsocket mais il est limité sur les gros fichiers
			$errno = 0;
			$url = parse_url($src);
			$errstr = $info = '';
			$fichier = '';
			$fichier .= ($url['path'] != '')? $url['path'] : '';
			$fichier .= ($url['query'] != '')? '?'.$url['query'] : '';
			$fsock = @fsockopen($url['host'], 80, $errno, $errstr, 10);
			@fputs($fsock, "GET ".$fichier." HTTP/1.1\r\n");
			@fputs($fsock, "HOST: ".$url['host']." \r\n");
			@fputs($fsock, "Connection: close\r\n\r\n");
			$get_info = false;
			while (!@feof($fsock))
			{
				if ($get_info)
				{
					$info .= @fread($fsock, 1024);
				}
				else
				{
					if (@fgets($fsock, 1024) == "\r\n")
					{
						$get_info = true;
					}
				}
			}
			@fclose($fsock);
		}
		if (($fp2 = @fopen($dest,'w')) === false)
		{
			return ('Impossible d\'écrire les données du jeu sur le disque.');
		}
		else
		{
			fwrite($fp2,$info);
			fclose($fp2);
			return true;
		}
	}
saint-pere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 10h27   #8
Membre actif
 
Avatar de pimpmyride
 
Inscription : décembre 2005
Messages : 303
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 303
Points : 156
Points : 156
mmh, j'avais eu le même problème sur un hebergement mutualisé. Après une grosse prises de tête, j'ai modifié la config du serveur apache :
max_upload_file_size 10 mo.

et hop ca passe et sans erreur 500.


le max upload file est limité à 2mo dans les configurations apache par defaut.
pimpmyride est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h01.


 
 
 
 
Partenaires

Hébergement Web