RE: Fopen // Erreur 500 - Xenos - 29-01-2013
Si l'hébergeur peut faire ca, c'est pas via les "ini_set" de php que tu pourras le modifier. Demande à l'hébergeur directement (via un forum ou le formulaire de contact qui peut se trouver sur le site de ton hébergeur).
Si ta variable fait exploser la mémoire, c'est peut-être que ton fichier est trop lourd et que ton, la méthode n'est pas appliquable sur un hébergeur mutualisé: il faudra passer au niveau au-dessus.
RE: Fopen // Erreur 500 - Wells - 29-01-2013
Bah déjà demandé, selon eux, c'est mon script qui va pas.
C'est évidement faux puisqu'il marche très bien avec les même données sur mon serveur de DEV.
Mais bon, tant que saurais pas quelle limitation ils ont mit,je ne pourrais pas leur mettre sous le nez.
Ce n'est pas la mémoire semble t'il, ni le timeout.
RE: Fopen // Erreur 500 - Xenos - 29-01-2013
Alors, peut-être pourra-t-on aider avec un code complet? Car là, je ne vois pas...
RE: Fopen // Erreur 500 - srm - 30-01-2013
Oui donne voir ton code complet
RE: Fopen // Erreur 500 - Roworll - 30-01-2013
Tu es certain que la génération du fichier sur ton serveur mutualisé n'excède pas le max_execution_time de 30s ?
RE: Fopen // Erreur 500 - Wells - 30-01-2013
Sur, j'ai modifié la valeur pour un temps très large.
Je vous donne le bout de code, mais bon à mon avis ca vous aidera pas beaucoup
Code : //##################### GENERATION DU XML ###########################
$dossier='.';
$xml='<?xml version="1.0" encoding="ISO-8859-1"?>';
$xml.='
<xml>';
$xml.='
<CentreX>'.$X_Centre.'</CentreX>
<CentreY>'.$Y_Centre.'</CentreY>';
$xml.='
<TailleX>'.($MAXX_TOTAL-$MINX_TOTAL).'</TailleX>
<TailleY>'.($MAXY_TOTAL-$MINY_TOTAL).'</TailleY>';
$xml.='
<MinX>'.$MINX_TOTAL.'</MinX>
<MinY>'.$MINY_TOTAL.'</MinY>';
$xml.='
<MaxX>'.$MAXX_TOTAL.'</MaxX>
<MaxY>'.$MAXY_TOTAL.'</MaxY>';
unlink($dossier.'/cartoadel.xml');
xmlfic($dossier.'/cartoadel.xml',$xml);unset($xml);
$case_afaire = array_merge($case_s_type,$case_f_type,$case_ss_type,$objet_liste);
//parcours de la grille
$LISTE_JOUEUR = array();
foreach($case_afaire as $Coordonnees=>$rien)
{
$coor=explode('/',$Coordonnees);
$X_PARCOUR=$coor[0];
$Y_PARCOUR=$coor[1];
$xml.='
<Case X="'.$X_PARCOUR.'" Y="'.$Y_PARCOUR.'" ENV="'.$Espace_Scan[$X_PARCOUR][$Y_PARCOUR]['type'].'">';
//1:ennemis,2:joueur,3:alliance,4:allie,5:neutre
if($case_s_type[$X_PARCOUR.'/'.$Y_PARCOUR]!='')
$xml.='
<TypeSys>'.$case_s_type[$X_PARCOUR.'/'.$Y_PARCOUR].'</TypeSys>';
if($case_f_type[$X_PARCOUR.'/'.$Y_PARCOUR]!='')
$xml.='
<TypeFlo>'.$case_f_type[$X_PARCOUR.'/'.$Y_PARCOUR].'</TypeFlo>';
if($case_ss_type[$X_PARCOUR.'/'.$Y_PARCOUR]!='')
$xml.='
<TypeSta>'.$case_ss_type[$X_PARCOUR.'/'.$Y_PARCOUR].'</TypeSta>';
//Gestion de la liste des systemes du joueur
$liste_s=explode('¤',$systeme_liste[$X_PARCOUR][$Y_PARCOUR]);
for($asys=0;$asys<count($liste_s)-1;$asys++)
{
if($LISTE_JOUEUR[$SYSTEME_INFO[$liste_s[$asys]]['joueur']]=='') $LISTE_JOUEUR[$SYSTEME_INFO[$liste_s[$asys]]['joueur']] = new WJoueur($SYSTEME_INFO[$liste_s[$asys]]['joueur'],$dbh);
$xml.='
<Systeme id="'.$liste_s[$asys].'" type="'.$SYSTEME_INFO[$liste_s[$asys]]['type'].'">';
$xml.='
<Joueur race="'.$LISTE_JOUEUR[$SYSTEME_INFO[$liste_s[$asys]]['joueur']]->id_RaceID.'">'.$SYSTEME_INFO[$liste_s[$asys]]['joueur'].'</Joueur>';
$xml.='
<Nom>'.$SYSTEME_INFO[$liste_s[$asys]]['nom'].'</Nom>';
$xml.='
<Climat>'.$SYSTEME_INFO[$liste_s[$asys]]['climat'].'</Climat>';
$xml.='
<Pollution>'.$SYSTEME_INFO[$liste_s[$asys]]['pollution'].'</Pollution>';
$xml.='
<Pop>'.WFonction::add_point($SYSTEME_INFO[$liste_s[$asys]]['pop']).'</Pop>';
$xml.='
<Porte90>'.$SYSTEME_INFO[$liste_s[$asys]]['PORTE90'].'</Porte90>';
$xml.='
</Systeme>';
}
//Gestion de la liste des systemes qui ne sont pas aux joueurs
$liste_s_en=explode('¤',$systeme_liste_en[$X_PARCOUR][$Y_PARCOUR]);
for($asys_en=0;$asys_en<count($liste_s_en)-1;$asys_en++)
{
if($LISTE_JOUEUR[$SYSTEME_INFO[$liste_s_en[$asys_en]]['joueur']]=='') $LISTE_JOUEUR[$SYSTEME_INFO[$liste_s_en[$asys_en]]['joueur']] = new WJoueur($SYSTEME_INFO[$liste_s_en[$asys_en]]['joueur'],$dbh);
$xml.='
<Systeme id="'.$liste_s_en[$asys_en].'" type="'.$SYSTEME_INFO[$liste_s_en[$asys_en]]['type'].'">';
$xml.='
<Joueur race="'.$LISTE_JOUEUR[$SYSTEME_INFO[$liste_s_en[$asys_en]]['joueur']]->id_RaceID.'">'.$SYSTEME_INFO[$liste_s_en[$asys_en]]['joueur'].'</Joueur>';
$xml.='
<Nom>'.$SYSTEME_INFO[$liste_s_en[$asys_en]]['nom'].'</Nom>';
$xml.='
<Climat>'.$SYSTEME_INFO[$liste_s_en[$asys_en]]['climat'].'</Climat>';
$xml.='
<Pollution>'.$SYSTEME_INFO[$liste_s_en[$asys_en]]['pollution'].'</Pollution>';
$xml.='
<Pop>'.WFonction::add_point($SYSTEME_INFO[$liste_s_en[$asys_en]]['pop']).'</Pop>';
$xml.='
</Systeme>';
}
//Gestion de la liste des flottes du joueur
$liste_f=explode('¤',$flotte_liste[$X_PARCOUR][$Y_PARCOUR]);
for($aflo=0;$aflo<count($liste_f)-1;$aflo++)
{
$xml.='
<Flotte id="'.$liste_f[$aflo].'" type="'.$FLOTTE_INFO[$liste_f[$aflo]]['type'].'">';
$xml.='
<Race>'.$FLOTTE_INFO[$liste_f[$aflo]]['race'].'</Race>';
$xml.='
<Joueur>'.$FLOTTE_INFO[$liste_f[$aflo]]['joueur'].'</Joueur>';
$xml.='
<Alliance>'.$FLOTTE_INFO[$liste_f[$aflo]]['alliance'].'</Alliance>';
$xml.='
<Num>'.$FLOTTE_INFO[$liste_f[$aflo]]['num'].'</Num>';
$xml.='
<Nom>'.$FLOTTE_INFO[$liste_f[$aflo]]['nom'].'</Nom>';
$xml.='
<Structure>'.$FLOTTE_INFO[$liste_f[$aflo]]['struct'].'</Structure>';
$xml.='
<Porte90>'.$FLOTTE_INFO[$liste_f[$aflo]]['PORTE90'].'</Porte90>';
$xml.='
</Flotte>';
}
//Gestion de la liste des flottes qui ne sont pas aux joueurs
$liste_f_en=explode('¤',$flotte_liste_en[$X_PARCOUR][$Y_PARCOUR]);
for($aflo_en=0;$aflo_en<count($liste_f_en)-1;$aflo_en++)
{
$xml.='
<Flotte id="'.$liste_f_en[$aflo_en].'" type="'.$FLOTTE_INFO[$liste_f_en[$aflo_en]]['type'].'">';
$xml.='
<Race>'.$FLOTTE_INFO[$liste_f_en[$aflo_en]]['race'].'</Race>';
$xml.='
<Joueur>'.$FLOTTE_INFO[$liste_f_en[$aflo_en]]['joueur'].'</Joueur>';
$xml.='
<Alliance>'.$FLOTTE_INFO[$liste_f_en[$aflo_en]]['alliance'].'</Alliance>';
$xml.='
<Num>'.$FLOTTE_INFO[$liste_f_en[$aflo_en]]['num'].'</Num>';
$xml.='
<Nom>'.$FLOTTE_INFO[$liste_f_en[$aflo_en]]['nom'].'</Nom>';
$xml.='
<Structure>'.$FLOTTE_INFO[$liste_f_en[$aflo_en]]['struct'].'</Structure>';
if($FLOTTE_INFO[$liste_f[$aflo]]['PORTE90']!='')
{
$xml.='
<Porte90>'.$FLOTTE_INFO[$liste_f[$aflo]]['PORTE90'].'</Porte90>';
}
$xml.='
</Flotte>';
}
//Gestion de la liste des stations du joueur
$liste_ss=explode('¤',$station_liste[$X_PARCOUR][$Y_PARCOUR]);
for($asta=0;$asta<count($liste_ss)-1;$asta++)
{
$xml.='
<Station id="'.$liste_ss[$asta].'" type="'.$STATION_INFO[$liste_ss[$asta]]['type'].'">';
$xml.='
<Race>'.$JOUEUR->id_RaceID.'</Race>';
$xml.='
<Joueur>'.$login.'</Joueur>';
$xml.='
<Nom>'.$STATION_INFO[$liste_ss[$asta]]['nom'].'</Nom>';
$xml.='
<Taille>'.$STATION_INFO[$liste_ss[$asta]]['taille'].'</Taille>';
$xml.='
</Station>';
}
//Gestion de la liste des stations qui ne sont pas aux joueurs
$liste_ss_en=explode('¤',$station_liste_en[$X_PARCOUR][$Y_PARCOUR]);
for($asta_en=0;$asta_en<count($liste_ss_en)-1;$asta_en++)
{
$xml.='
<Station id="'.$liste_ss_en[$asta_en].'" type="'.$STATION_INFO[$liste_ss_en[$asta_en]]['type'].'">';
$xml.='
<Race>'.$STATION_INFO[$liste_ss_en[$asta_en]]['race'].'</Race>';
$xml.='
<Joueur>'.$STATION_INFO[$liste_ss_en[$asta_en]]['joueur'].'</Joueur>';
$xml.='
<Nom>'.$STATION_INFO[$liste_ss_en[$asta_en]]['nom'].'</Nom>';
$xml.='
<Taille>'.$STATION_INFO[$liste_ss_en[$asta_en]]['taille'].'</Taille>';
$xml.='
</Station>';
}
//Gestion des objets
$liste_obj=explode('¤',$objet_liste[$X_PARCOUR.'/'.$Y_PARCOUR]);
for($aobj=0;$aobj<count($liste_obj)-1;$aobj++)
{
$xml.='
<Objet id="'.$liste_obj[$aobj].'" type="'.$OBJET_INFO[$liste_obj[$aobj]]['type'].'">';
$xml.='
<Valeur>'.$OBJET_INFO[$liste_obj[$aobj]]['valeur'].'</Valeur>';
$xml.='
</Objet>';
}
$xml.='
</Case>';
}
xmlfic_intermediaire($dossier.'/cartoadel.xml',$xml);unset($xml);
//environement
foreach($Espace_Scan as $X_PARCOUR=>$tab2)
foreach($tab2 as $Y_PARCOUR=>$rien)
{
if($Espace_Scan[$X_PARCOUR][$Y_PARCOUR]['type']==1 and WCarto::ZoneScan($zone_scanne_asteroide,$X_PARCOUR,$Y_PARCOUR,0)==1)
{
$xml.='
<Env X="'.$X_PARCOUR.'" Y="'.$Y_PARCOUR.'" id="'.$Espace_Scan[$X_PARCOUR][$Y_PARCOUR]['type'].'" type="'.$Espace_Scan[$X_PARCOUR][$Y_PARCOUR]['image'].'" popup="1">';
$xml.='
<ValeurMiniere>'.WFonction::add_point($Espace_Scan[$X_PARCOUR][$Y_PARCOUR]['purete']).'</ValeurMiniere>';
$xml.='
</Env>';
}
else
$xml.='
<Env X="'.$X_PARCOUR.'" Y="'.$Y_PARCOUR.'" id="'.$Espace_Scan[$X_PARCOUR][$Y_PARCOUR]['type'].'" type="'.$Espace_Scan[$X_PARCOUR][$Y_PARCOUR]['image'].'" popup="0" />';
}
$xml.='
</xml>';
xmlfic_intermediaire($dossier.'/cartoadel.xml',$xml);
RE: Fopen // Erreur 500 - Xenos - 30-01-2013
Rajoutes-toi des informations de débuggage, comme la longueur de la chaîne de $xml au fil de l'exécution (quelle longueur après chaque foreach?).
Une autre piste:
http://blog.occi-tech.com/2012/10/erreur-premature-end-of-script-headers-ovh/
Il se peut que ton dossier d'écriture ai des soucis de droits qui ne permettent pas l'enregistrement. Il se peut qu'il existe un quotat (taille par fichier ou taille par dossier ou taille total) que tu dépasses.
RE: Fopen // Erreur 500 - srm - 30-01-2013
En effet ça ne nous aide pas tu nous donnes pas les fonctions importantes
RE: Fopen // Erreur 500 - Xenos - 30-01-2013
J'suis pas d'accord, oxman: je trouve le code fourni suffisant pour aider, car on y trouve plusieurs "foreach" imbriqués, ce qui tend à faire exploser la longueur de la chaine XML.
Or, dans l'écriture d'un fichier via PHP, il se peut que la chaine à écrire soit limitée en taille, ou que, sous format UTF-8 par exemple, la longueur de la chaine soit doublée et dépasse la capacité de la mémoire allouable au script.
D'où ma demande/conseil: trace l'évolution de la longueur de la chaine XML au fil du programme pour t'assurer que celle-ci n'explose pas. D'autant que tu as indiqué que cette erreur survient "depuis que la taille de la carte a augmentée", or si la taille de carte a augmentée, la taille de la chaine XML stockant cette carte a surement augmentée aussi, et donc, cette taille peut être la source du dépassement de capacité qui semble être rencontré ici.
RE: Fopen // Erreur 500 - srm - 30-01-2013
Il aurait une erreur memory_limit dans ce cas non ?
|