Probleme sur serveur web raspberry

Bonjour, je suis enseignant en lycée professionnel,

j’ai fait toute l’installation que vous avez préconisé (sur cette page:Installer un serveur web sur votre Raspberry (Apache + PHP + MySQL)). Et tout s’installe sans soucis

Pourtant j’ai une page html qui lance une page php mais le formulaire n’est pas transmis dans la page php.

En tout cas la programmation fonctionne, j’ai essayé sur easyphp et sur un serveur linux et ça fonctionne (je demande une adresse IP et la page php me dit s’il elle est de classe A, B, C…).

Que faire?

Cordialement,

Pour tester ton formulaire, fait un fichier php comme suit;

<?php
print("<h1>_GET results</h1><pre>");
print_r($_GET);
print("</pre></hr/><h1>_POST results</h1><pre>");
print_r($_POST);
print("</pre>");

Pointe ton formulaire vers ce fichier et test. SI les champs sont vide, ton formulaire envoie rien, alors poste ton code HTML ici qu’ont le debug.

Voici mon code html.
Je précise de nouveau, cela fonctionne avec easyphp et sur un vieux serveur linux, mais pas sur raspberry os:

<html>
<head>
<title>CALCUL IP</title>
</head>
<body>
<table border="1" style="border-collapse: collapse" cellpadding="3">
<tr><td align="center" width="300">
<H1>CALCUL IP</H1>
<form method="post" action="calcul_ip.php">
<input type="text" name="adr" size="15" maxlength="15">
<br><br>
<input type="submit" name="go" value="Calculer">
</form>
</td></tr>
</table>
</body>
</html>

voici mon code php:

 <?PHP

# INITIALISATION DES VARIABLES
//var $erreur;

# TEST ACTION SUR LE BOUTON "GO"
if ( isset($_POST['go']) ) 
{
	
	# TEST ADRESSE IP VALIDE
	$adr = $_POST['adr'];
	if ( ereg ("(([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})){1}",$adr,$tab)) 
	{
		
		# AFFICHAGE DE L'ADRESSE IP
		
		echo "Adresse IP : <font color=\"#0000FF\" style=\"font-weight='bold'\">";
		
		# TEST ADRESSE IP DE CLASSE A
		if ( $tab[2] <=127)  
		{
			if ( $tab[3] == 0 & $tab[4] == 0 & $tab[5] == 0 ) 
				{
				$texte = "<font color=\"#FF0000\" style=\"font-weight='bold'\">Ceci est une adresse de réseau !...</font><br>";
				}
			elseif ( $tab[3] == 255 & $tab[4] == 255 & $tab[5] == 255 ) 
				{
				$texte = "<font color=\"#FF0000\" style=\"font-weight='bold'\">Ceci est une adresse de broadcast !...</font><br>";
				}
			else 
				{
				$texte = "Classe : <font color=\"#0000FF\" style=\"font-weight='bold'\">A</font><br>";
				$texte .= "Masque de réseau : <font color=\"#0000FF\" style=\"font-weight='bold'\">255.0.0.0</font><br>";
				$texte .= "Adresse de réseau :<font color=\"#0000FF\" style=\"font-weight='bold'\">".$tab[2].".0.0.0</font><br>";
				$texte .= "Adresse de broadcast : <font color=\"#0000FF\" style=\"font-weight='bold'\">".$tab[2].".255.255.255</font><br>";
				}
		}
			
		# TEST ADRESSE IP DE CLASSE B
		#
		if ( $tab[2] >=128 & $tab[2] <=191)  
		{
			if ( $tab[4] == 0 & $tab[5] == 0 ) 
				{
				$texte = "<font color=\"#FF0000\" style=\"font-weight='bold'\">Ceci est une adresse de réseau !...</font><br>";
				}
			elseif ( $tab[4] == 255 & $tab[5] == 255 ) 
				{
				$texte = "<font color=\"#FF0000\" style=\"font-weight='bold'\">Ceci est une adresse de broadcast !...</font><br>";
				}
			else 
				{
				$texte = "Classe : <font color=\"#0000FF\" style=\"font-weight='bold'\">B</font><br>";
				$texte .= "Masque de réseau : <font color=\"#0000FF\" style=\"font-weight='bold'\">255.255.0.0</font><br>";
				$texte .= "Adresse de réseau :<font color=\"#0000FF\" style=\"font-weight='bold'\">".$tab[2].".".$tab[3].".0.0</font><br>";
				$texte .= "Adresse de broadcast : <font color=\"#0000FF\" style=\"font-weight='bold'\">".$tab[2].".".$tab[3].".255.255</font><br>";
				}
		}
		# TEST ADRESSE IP DE CLASSE C
		if ( $tab[2] >=192 & $tab[2] <=223)  
		{
			if ( $tab[5] == 0 ) 
				{
				$texte = "<font color=\"#FF0000\" style=\"font-weight='bold'\">Ceci est une adresse de réseau !...</font><br>";
				}
			elseif ( $tab[5] == 255 ) 
				{
				$texte = "<font color=\"#FF0000\" style=\"font-weight='bold'\">Ceci est une adresse de broadcast !...</font><br>";
				}
			else 
				{
				$texte = "Classe : <font color=\"#0000FF\" style=\"font-weight='bold'\">C</font><br>";
				$texte .= "Masque de réseau : <font color=\"#0000FF\" style=\"font-weight='bold'\">255.255.255.0</font><br>";
				$texte .= "Adresse de réseau :<font color=\"#0000FF\" style=\"font-weight='bold'\">".$tab[2].".".$tab[3].".".$tab[4].".0</font><br>";
				$texte .= "Adresse de broadcast : <font color=\"#0000FF\" style=\"font-weight='bold'\">".$tab[2].".".$tab[3].".".$tab[4].".255</font><br>";
				}
		}
		
		# TEST ADRESSE IP DE CLASSE D
		#
		if ( $tab[2] >=224 & $tab[2] <=239)  
		
			
				
				$texte = "Classe : <font color=\"#0000FF\" style=\"font-weight='bold'\">D</font><br>";
				
		
		# TEST ADRESSE IP DE CLASSE E
		#
	if ( $tab[2] >=248 & $tab[2] <=255)  
		
			
				
				$texte = "Classe : <font color=\"#0000FF\" style=\"font-weight='bold'\">E</font><br>";
	}			
		
	# SI ADRESSE IP NON VALIDE
	else { $erreur = 1; }
	
}

# AFFICHAGE
if ( isset($erreur) ) 
	{
	echo "<font color=\"#FF0000\" style=\"font-weight='bold'\">Adresse IP non valide !...</font><br>";
	}
else { echo $texte;	}
echo "
	<br>
	<input type=\"button\" value=\"Retour\" onClick=\"window.location.href='calcul_ip.htm'\">
	";
	
?>

Ton form a l’air OK, test avec mon document pour voir si il soumet les données correctement, après débug chaque ligne de ton code pour savoir ou il plante.

J’ai testé d’afficher la variable adr dans le fichier PHP. Et rien ne s’affiche
Il me semble que ça doit être une configuration d’Apache ou de PHP, mais la quelle ?
J’ai l’impression que PHP ne décode pas le programme

Ce n’est pas un problème en principe, si ton extension .php est correctement traité. Tu peux simplement tenter pour tester d’imprimer le config de php.

test.php

<?php 
phpinfo();

Dedans tu va voir tout les paramètres.

Garde mon fichier pour tester les variables

vars.php

<?php
print("<h1>_GET results</h1><pre>");
print_r($_GET);
print("</pre></hr/><h1>_POST results</h1><pre>");
print_r($_POST);
print("</pre>");

Sur ton site, tu va appeler en premier lieu le phpinfo

http://tonrpiweb/test.php

Si tu obtient une série de tableau avec le logo de PHP, c’est que le PHP est correctement chargé.

Par la suite, test tes variables;

http://tonrpiweb/vars.php?var1=value1&var2=value2

Tu devrais voir dans la section _GET des réponses comme;

...
"var1"=>"value1",
"var2"=>"value2"
...

Tu peux ajouter des echo "position A" dans certaines partie de ton code pour savoir ce qu’il traite et ce qu’il traite pas (et tu change le « A » par d’autres lettres). Comme par exemple si tu met position A en début, position C à la fin et dans ton code de traitement de formulaire le B, et qu’en final tu voi que le A et le B, tu sais qu’il ne traite pas le segment B, mais que le PHP marche.


Au passage, remplace ton <?PHP par une version en minuscule comme <?php . Ça peut aussi être la cause.

ok.
J’avais déjà testé le phpinfo();
Il m’affiche bien le logo avec le tableau.
Pour le reste je vais le faire demain, je te tiens au courant.
Merci beaucoup.

J’ai testé le fichier vars.php et il fonctionne correctement, il affiche :
_GET results
Array
(
[var1] => value1
[var2] => value2
)
_POST results
Array
(
)
Par contre en changeant PHP par php ça ne change rien.

Est ce que c’est possible de ne pas avoir le fichier html et de demander directement dans le fichier php l’adresse ip . Je ne m’y connais pas trop en prog. Donc il faut que j’ajoute quoi comme ligne dans mon fichier php?
J’ai testé d’afficher la variable adr dès le début du fichier php et rien ne s’affiche (page blanche). Voici le début du code modifié:
<?php

# INITIALISATION DES VARIABLES

//var $erreur;

print_r($adr);

# TEST ACTION SUR LE BOUTON "GO"

if ( isset($_POST['go']) ) 

Que faire?

Si ça peut aider, quand je lance le html directement dans raspberry os, au lieu d’ouvrir la page php, chromium me demande de télécharger le fichier .php.
Par ontre sur un pc, en passant par l’adresse ip il ouvre la page en .php

Aussi ,j’ai l’impression que la variable adr qui récupère l’adresse IP demandée n’est pas transmise dans le fichier .php.
Donc…

j’ai testé d’afficher les erreurs et il marque:
Notice : Undefined variable: adr in /var/www/html/calcul_ip.php on line 4
Donc on a bien la variable adr qui n’est pas transmise dans le fichier php.
Pourtant, je répète: sur un vieux serveur linux, ça fonctionne et sur easyphp sur windows ça fonctionne aussi

bon apparemment, aussi, la fonction ereg n’existe plus sous php7…
Donc je ne sais pas quoi faire…
Vous savez comment on installe une vieille version de php, la 5 par exemple?

Bonjour
la fonction ereg est remplacée par preg-match() dans php 7

oui mais comment je remplace ça dans ma programmation:
if ( ereg ("(([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})){1}",$adr,$tab))

Car là je suis perdu

Pour valider unz adresse ip il ya une autre solution:
Essaye le code suivant:
<?php
$IP = ‹ 192.168.1.240 ›;
if(filter_var($IP, FILTER_VALIDATE_IP))
{
echo $IP." : Ip valide
";
}
else
{
echo $IP." : Ip non validevalide
";
}
$IP = ‹ 192.168.1.420 ›;
if(filter_var($IP, FILTER_VALIDATE_IP))
{
echo $IP." : Ip valide
";
}
else
{
echo $IP." : Ip non valide
";
}
$IP = ‹ fe80::53dd:723b:553e:178f ›;
if(filter_var($IP, FILTER_VALIDATE_IP))
{
echo $IP." : Ip valide
";
}
else
{
echo $IP." : Ip non valide
";
}
?>

oui mais il faut que je récupère chaque octet pour pouvoir dire si c’est une adresse de classe A ou B…
Avec cette solution, ça ne marche pas.

et comme ça avec $tab = explode(".",$IP);
<?php
function check_IP($IP)
{
echo « 
 ».$IP;
if(filter_var($IP, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))
{
$ret = « IPv4 »;
}
else
{
if(filter_var($IP, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6,))
{
$ret = « IPv6 »;
}
else
{
$ret = « non »;
}
}
return $ret;
}
$IP = ‹ 192.168.1.420 ›;
$code = check_IP($IP);
echo " => « .$code. »
";
if ($code == « IPv4 »)
{
$tab = explode(".",$IP);
print_r ($tab);
}
$IP = ‹ 192.168.1.120 ›;
$code = check_IP($IP);
echo " => « .$code. »
";
if ($code == « IPv4 »)
{
$tab = explode(".",$IP);
print_r ($tab);
};
$IP = ‹ fe80::d083:364d:114e:dac4 ›;
$code = check_IP($IP);
echo " => « .$code. »
";
if ($code == « IPv4 »)
{
$tab = explode(".",$IP);
print_r ($tab);
}
?>

C’est bon j’ai trouvé comment remplacer ereg par pre-match
et il y avait une erreur sur cette ligne: $adr = $_POST["adr"];
j’avais mis ['adr'] et pas "adr"
Donc maintenant adr est bien pris en compte par le php.
Tout fonctionne

Pour utiliser le IP du visiteur, tu peux utiliser $_SERVER[‘REMOTE_ADDR’] . Tu peux accéder aux variables serveurs, tel que listé avec phpinfo(), via cette variable.

Si le fichier est téléchargé, c’est que ton « virtual host » dans Apache est mal configuré.