PHP : Commentaires monolignes ne fonctionnent plus

WRInaute discret
Bonjour,

Je viens récemment de me prendre un serveur dédié chez OVH et je suis actuellement en train de programmer un nouveau site. De ce fait, il est possible que j'aie mal configuré certaines choses car il s'agit de mon premier dédié.

Mais en l'occurrence, mon problème est extrêmement bizarre : les commentaires monolignes ne fonctionnent plus... et me renvoient à chaque fois une erreur du type Parse error: syntax error, unexpected $end in /var/www/ma_page.php on line 1 quand ils sont placés dans un bloc d'instruction ou stoppent tout simplement l'exécution du reste du script s'ils se trouvent dans le corps principal

En gros, ce bout de code ne fonctionne pas et renvoit une erreur :

Code:
<?php
if(1==1)
	{
		//commentaire
	}
?>

Idem pour celui-ci :

Code:
<?php
if(1==1)
	{
		#commentaire
	}
?>

En revanche, celui-ci fonctionne :

Code:
<?php
if(1==1)
	{
		/*commentaire*/
	}
?>

Mais celui-ci stoppe le script sans renvoyer d'erreur :

Code:
<?php

//Commentaire placé avant le bloc
if(1==1)
	{
		echo 'test';
	}
?>

Quand je parle de bloc, il s'agit tout autant de conditions if que de boucles while, etc.

Voilà, j'aime bien mon ami google mais il n'a pas voulu m'aider cette fois-ci... De plus, peu importe où se trouve le commentaire, l'erreur retournée est toujours la ligne 1.

Comment une chose pareille serait possible ?

Merci d'avance,

7804j
 
WRInaute discret
Là, avec Notepad++. Aucune idée pour les retours de chariot. Comment puis-je savoir de quels type ils sont ?
 
WRInaute accro
Dans notepad++ : preferences => New document => Format (Windows, Unix, Mac ?)
Si tu ouvres ton fichier en SSH avec vi ou nano, il a l'air good (peut-être erreur lors du transfert FTP) ?
 
WRInaute impliqué
Je ne pense pas à une erreur de transfert ou de carriages return, vu qu'il y a manifestement erreur sur le classique double slash et non sur le slach etoile.

J'y connais rien en apache, mais je pari qu'on peut lui définir le caractère à prendre en compte comme commentaire (qu'il n'est pas imposé)... C'est peut-être là le bug.
 
WRInaute accro
pour infirmer ou confirmer que le problème du caractère de fin de ligne (\n, \n\r ou \r\n) n'entre pas en ligne de compte il faudrait tester un script comme ça :
Code:
<?php //commentaire ?>
et comparer avec :
Code:
<?php 
//commentaire 
echo "blabla"; 
?>
Si pas d'erreur de parse sur le premier script il faudrait approfondir cette histoire de caractère de fin de ligne.
Perso je pensais a ça aussi.
 
WRInaute discret
Merci de vos réponses toutes très intéressantes. J'avais posté la même question sur le siteduzero et apparemment personne n'était en mesure de donner une hypothèse.

Donc en effet, le problème venait des sauts de ligne. J'ai ouvert le document en ligne de commande et j'ai vu qu'il tenait sur une ligne complète ^^'

Donc dans notepad++, c'est paramété en format "Windows" (j'ai le choix avec Windows, Mac et Unix). Est-ce que c'est dû à cela ? Est-ce qu'il me faudrait choisir Unix ?

Dans mon ancien hébergement, en mutualisé (aussi sous Apache), je n'avais pas ce problème avec pourtant la même config du notepad. Est-ce qu'il faudrait que je configure Apache pour qu'il puisse lire le retour de chariot format windows ?
 
WRInaute accro
7804j a dit:
sur le siteduzero et apparemment personne n'était en mesure de donner une hypothèse.
C'est le level au dessus ici :mrgreen:

7804j a dit:
Donc en effet, le problème venait des sauts de ligne.
Ahhh j'avais bien deviné.

7804j a dit:
Donc dans notepad++, c'est paramété en format "Windows" (j'ai le choix avec Windows, Mac et Unix). Est-ce que c'est dû à cela ? Est-ce qu'il me faudrait choisir Unix ?
Normalement avec format Windows ça fonctionne aussi. Tu peux essayer en UNIX. Mais je pense que ça viens de ton mode de transfert FTP (binary / ASCII).

7804j a dit:
Est-ce qu'il faudrait que je configure Apache pour qu'il puisse lire le retour de chariot format windows ?
Même en ligne de commande tes retours chariots ne se sont pas affichés, le problème ne vient pas Apache.
 
WRInaute discret
Ok, donc effectivement, j'utilise Filezilla et j'ai le choix entre binary, ASCII ou automatique. Je suis actuellement en automatique.

Ce qui est bizarre, c'est que l'automatique n'ait pas l'air de fonctionner.

Mais si vraiment le fichier était transféré en binary à la place de ASCII ou inversement, comment se fait-il qu'il n'y ait que des problèmes au niveau des sauts de ligne ? Le fichier en entier ne devrait-il pas être corrompu ? Ou aurais-je mal compris le fonctionnement ? Il me semble que si on transforme par exemple du binaire... en binaire, ça va pas le faire (donc par exemple 0110000101110111 en 00110000001100010011000100110000001100000011000000110000001100010011000000110001001100010011000100110000001100010011000100110001).

Justement à ce propos, j'ai essayé de prendre des fichiers créés SANS le notepad++ et de les envoyer AUSSI avec filzilla, même config, même serveur et là, plus de problème. Ensuite, j'ai essayé d'éditer ces fichiers avec notepad++ et pas de problème non plus. Donc à priori, il s'agit uniquement du notepad++ dans le cas de NOUVEAUX fichiers.

Je vais essayer de voir si je trouve qqch là-dessus demain :)
 
WRInaute discret
Voilà, là solution était apparemment uniquement du côté de Notepad++. Il fallait modifier les sauts de ligne en format UNIX. Pour l'appliquer rétroactivement à un ancien document, il fallait aller dans Edition > Convertir les sauts de ligne > Unix (LF)

Donc merci de votre aide, ça parait maintenant évident mais je n'y avais pas pensé :)
 
Discussions similaires
Haut