Page 1 sur 1

Bug APC + PHP5.2... J'y comprend riend !

Posté : 30 août 2008, 08:45
par Sava fermal
Bonjour,

J'ai perdu ma nuit sur une chose à priori simple: De upload de fichier avec APC 3.0.19 et PHP 5.2.6, beaucoup d'aide sur la toile, tout fonctionne, avec affichage de la vitesse durant le transfert, c'es jolie comme tout mais voilà

le problème: dès que le fichier est uploadé: il disparait et move_uploaded_file(...) renvoi FALSE :x !

J'ai essayé toutes les config possible (ou presque) d'APC dans le php.ini, les dossiers /www/tmp et /www/tmp/upload ont pour autorisations 777 nobody:nogroup



Quelques parametres du php.ini

Code : Tout sélectionner

file_uploads = On upload_tmp_dir = /www/tmp upload_max_filesize = 100M max_execution_time = 30; max_input_time = 38800; memory_limit = 100M post_max_size = 8M error_reporting = E_ALL
La section [APC] actuelle du php.ini:

Code : Tout sélectionner

apc.shm_segments = 1 apc.optimisation = 0 apc.shm_size = 128 apc.ttl = 7200 apc.user_ttl = 7200 apc.num_files_hint = 1024 apc.mmap_file_mask= /www/tmp/vidUp.XXXXXX apc.enable_cli = 1 apc.stat = 1 apc.rfc1867 = on apc.write_lock = 1; apc.filters NULL apc.max_file_size = 200M apc.file_update_protection = 0;
Sans oublier la page appelée par la propriété 'action' de la form:
session_start();

if ($_SERVER['REQUEST_METHOD']=='POST')
{
	if (isSet($_FILES["Filedata"]))
	{
		file_saved();
	}	
}
else ...

function file_saved()
{
    		$FileName = $_FILES['Filedata']['name'];
    		$FileSize = round($_FILES['Filedata']['size']/1024);
		$FileType = $_FILES['Filedata']['type'];
    		$FileTemp = $_FILES['Filedata']['tmp_name'];

		$_SESSION['VideoFile1'] = "vid".md5(uniqid(rand(),true));
		$_SESSION['TmpVideoFile1'] = $_FILES["Filedata"]["tmp_name"];
		$_SESSION['addVidStep']="HDZj437zjka9453";
		move_uploaded_file($_FILES["Filedata"]["tmp_name"],"/www/tmp/upload/".$_FILES['VideoFile1']);
	
	exit;
}
Pour finir: voilà le contenu de ces variables lors d'un test:
$FileTemp  = '/www/tmp/php8klIkH';
$FileName = '1273.flv';
$FileSize = 55582;
$FileType = 'application/octet-stream';
$FileTemp = $_FILES['Filedata']['tmp_name'];
$_FILES["Filedata"]["error"]. = 0;
Pour cet exemple, un petit ls m'a montrait que le fichier /www/tmp/php8klIkH' existait bien... jusqu'a la fin du transfert, où ls devient muet :?

Quant au retour de apc_fetch() pour lui tout est OK: done = 1; cancel_upload = 0, size Ok, etc...:x

pour les logs (PHP ou APACHE): Pas la moindre petite ligne utile ! :shock:

Sinon l'upload sans APC fonctionne bien :twisted:


Voilà, là sans vous je suis perdu...

Petit oubli

Posté : 30 août 2008, 09:05
par Sava fermal
Oui euh désolé pour le titre je vous ai dit j'ai passé la nuit dessus...

Concernant le petit oubli voilà j'ai aussi un autre soucis, apc.mmap_file_mask= /www/tmp/vidUp.XXXXXX, et le fichier temporaire à un nom du genre '/www/tmp/php8klIkH'... Est-ce normal ?

Et puis un bout du formulaire également:

Code : Tout sélectionner

<form id="formAdd" enctype="multipart/form-data" method="post" action="/php/upload/videoUpload_progress.php" target="tfrm"> <input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value=".<? echo md5(uniqId(rand(),true)); ?>."> <input type="hidden" name="MAX_FILE_SIZE" value="100000000"> <input type="file" id="Filedata" name="Filedata" size=30 style="padding:5px;"> ... </form> <iframe id="tfrm" name="tfrm" style="display:none;"></iframe>
Et APC INFO me dit:

Code : Tout sélectionner

apc.cache_by_default 1 apc.coredump_unmap 0 apc.enable_cli 1 apc.enabled 1 apc.file_update_protection 0 apc.filters apc.gc_ttl 3600 apc.include_once_override 0 apc.max_file_size 200M apc.mmap_file_mask /www/tmp/vidUp.d50kPD apc.num_files_hint 1024 apc.report_autofilter 0 apc.rfc1867 1 apc.rfc1867_freq 0 apc.rfc1867_name APC_UPLOAD_PROGRESS apc.rfc1867_prefix upload_ apc.shm_segments 1 apc.shm_size 128 apc.slam_defense 0 apc.stat 1 apc.stat_ctime 0 apc.ttl 7200 apc.user_entries_hint 4096 apc.user_ttl 7200 apc.write_lock 1
Voilà j'espère ne rien avoir oublié, que j'en ai pas mis trop non plus et que quelqu'un m'aide, avant que je m'endorme debout... :?

Please help me !

Posté : 30 août 2008, 18:21
par Sava fermal
Personne n'a la moindre idée, vraiment ?

Posté : 30 août 2008, 18:55
par @rthur
A vrai dire vu la taille de ta question, ça ne m'étonne pas tellement que tu n'ait pas beaucoup de réponse :lol:

Ton code PHP d'upload semble correct, par conséquent ton problème viendrait d'APC...
...et là je pense que ça dépasse le niveau du forum "PHP débutant" ce qui est peut être une explication au faible nombre de réponse.

Essaye peut être ce code d'upload avec APC. Si il ne marche pas chez toi il faudra regarder du côté de la config d'APC, si il marche il faudra regarder ce qui diffère entre le code fourni et ton code.


Je vais demander à un modo de déplacer ton sujet dans "PHP avancé" en espérant qu'il y ait + de membres compétents sur APC (ce qui n'est pas mon cas malheureusement)

Posté : 30 août 2008, 19:04
par albat
Je vais demander à un modo de déplacer ton sujet dans "PHP avancé"
Voilà qui est fait. ;)
Ta recherche s'adresse en effet plutôt à des développeurs chevronnés.

Posté : 30 août 2008, 19:06
par Invité
Merci ! Désolé de la longueur de la question, il me semble que toutes ces infos sont utiles alors plutot que de les donner au compte goutte et au risque d'effrayer un peu...

En tout cas merci de votre aide car là ça ne fonctionne toujours pas, et je trouve vraiment étrange que le mmask_file_mask défini dans le php.ini ne soit pas utilisé alors que la page d'info APC me dit qu'il est bien pris en compte...

J'ai fait une petite erreur de copier/coller dans les quelques paramètres PHP:
c'est

Code : Tout sélectionner

memory_limit = 8M post_max_size = 100M
J'ai dormi mais je ne voudrais pas y passer une seconde nuit ... :roll:

Posté : 30 août 2008, 19:17
par Sava fermal
Pour le tuto je l'ai déja lu, ainsi que pas mal d'autres sur la question, mais celui-ci utilise une classe alors que mon PHP est encore trés procédural, je préfère pour le moment je suis moins perdu :)

mais le code est quasi-identique à d'autres tutos qui fonctionnent, de plus APC fonctionne bien.

Je fini de surcharger ce post: mon serveur se base sur lampp, si ça peut aider...

Je patoge toujours... :roll: