8791 sujets

Développement web côté serveur, CMS

Bonsoir,
j'ai un problème qui me parait vraiment bizarre: je me suis conçu un script php qui me permet de gérer automatiquement les domaines de mon serveur, de cette manière, lorsque un dossier est créé à l'emplacement "/Server/", il suffit d'exécuter le script pour que le domaine "nomdudossier.local" soit créé. Donc lorsque j'exécute le script depuis un navigateur, tout fonctionne très bien, mais lorsque je l'exécute par le biais d'une commande "php" sur le terminal, il y a un problème au niveau du chemin d'accès: Au début de mon script, je déclare une variable indiquant où se trouvent les dossiers désignant les domaines, ce qui donne:
$hosts_directory='/Server/';
Mais le terminal n'arrive pas à trouver les dossiers contenus dans "/Server/". J'ai donc essayer avec un certain nombre de chemin d'accès, notamment celui-ci: "../". Logiquement, le dossier supérieur est également "/Server/", pourtant, les dossiers qu'il m'affiche à l'intérieur me sont totalement inconnus. Si ça peu aider, voilà mon script et ma commande d'exécution:
<?php
	$host_subdomaine='www.';
	$host_extension='.local';
	$hosts_directory='/Server/';
	$hosts_file_hosts='/private/etc/hosts';
	$hosts_file_vhosts='/private/etc/apache2/extra/httpd-vhosts.conf';
	$server_path='/Server/';
	$server_host='server';
	$server_ip='127.0.0.1';
	if(isset($_SERVER["HTTP_USER_AGENT"])) {
		echo '<meta charset="UTF-8"><style>td{border:1px solid #000;padding:3px;}a{color:#000;}</style>';
	}
	else {
	}
	if($hosts_directory=@opendir($hosts_directory)) {
		$line_file_hosts='

'.$server_ip.' '.$server_host.$host_extension.'
'.$server_ip.' '.$host_subdomaine.$server_host.$host_extension.'
';
		$line_file_vhosts='
<VirtualHost *:80>
   DocumentRoot "'.$server_path.'"
   ServerName '.$server_host.$host_extension.'
</VirtualHost>
<VirtualHost *:80>
   DocumentRoot "'.$server_path.'"
   ServerName '.$host_subdomaine.$server_host.$host_extension.'
</VirtualHost>';
		if(isset($_SERVER["HTTP_USER_AGENT"])) {
			echo '<table>';
			echo '	<tr>';
			echo '		<td colspan="2">Liste des noms de domaine du serveur:</td>';
			echo '	</tr>';
			echo '	<tr>';
			echo '		<td><a href="http://'.$host_subdomaine.$server_host.$host_extension.'">'.$host_subdomaine.$server_host.$host_extension.'</a></td><td>'.$server_path.'</td>';
			echo '	</tr>';
		}
		else {
			echo '

Liste des noms de domaine du serveur:

'.$host_subdomaine.$server_host.$host_extension.'	'.$server_path.'
';
		}
		while(false!==($host_directory=readdir($hosts_directory))) {
			if(isset($_SERVER["HTTP_USER_AGENT"])) {
				echo $host_directory;
			}
			if(is_dir('../'.$host_directory) && $host_directory!=='Server-Config' && !preg_match('#\.+#',$host_directory)) {
				$host=strtolower($host_directory);
				if(isset($_SERVER["HTTP_USER_AGENT"])) {
					echo '	<tr>';
					echo '<td><a href="http://'.$host_subdomaine.$host.$host_extension.'">'.$host_subdomaine.$host.$host_extension.'</a></td><td>'.$server_path.$host_directory.'/</td>';
					echo '	</tr>';
				}
				else {
					echo $host_subdomaine.$host.$host_extension.'	'.$server_path.$host_directory.'
';
				}
				$line_file_hosts=$line_file_hosts.$server_ip.' '.$host.$host_extension.'
'.$server_ip.' '.$host_subdomaine.$host.$host_extension.'
';
				$line_file_vhosts=$line_file_vhosts.'

<VirtualHost *:80>
   DocumentRoot "'.$server_path.$host_directory.'/"
   ServerName '.$host.$host_extension.'
</VirtualHost>
<VirtualHost *:80>
   DocumentRoot "'.$server_path.$host_directory.'/"
   ServerName '.$host_subdomaine.$host.$host_extension.'
</VirtualHost>';
			}
			else {
			}
		}
		if(isset($_SERVER["HTTP_USER_AGENT"])) {
			echo '</table>';
		}
		else {
		}
		if($file_hosts=fopen($hosts_file_hosts,'a+')) {
			$puts_file_hosts='##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost 
fe80::1%lo0	localhost'.$line_file_hosts;
			ftruncate($file_hosts,0);
			fputs($file_hosts, $puts_file_hosts);
			fclose($file_hosts);
		}
		else {
			$NoneAccessToFile=false;
		}
		if($file_vhosts=fopen($hosts_file_vhosts,'a+')) {
			$puts_file_vhosts='#
# Virtual Hosts
#
# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn\'t need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at 
# <URL:http://httpd.apache.org/docs/2.2/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option \'-S\' to verify your virtual host
# configuration.

#
# Use name-based virtual hosting.
#
NameVirtualHost *:80

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#

'.$line_file_vhosts;
			ftruncate($file_vhosts,0);
			fputs($file_vhosts, $puts_file_vhosts);
			fclose($file_vhosts);
		}
		else {
			$NoneAccessToFile=false;
		}
		if(isset($NoneAccessToFile)) {
			if(isset($_SERVER["HTTP_USER_AGENT"])) {
				echo '<br>Erreur: La liste des noms de domaine du serveur n\'a pu être mis à jour.<br>';
			}
			else {
				echo '

Erreur: La liste des noms de domaine du serveur n\'a pu être mis à jour.

Entrez le mot de passe root pour redémarrer le serveur:
';
			}
		}
		else {
			if(isset($_SERVER["HTTP_USER_AGENT"])) {
				echo '<br>La liste des noms de domaine du serveur a bien été mis à jour.<br>';
			}
			else {
				echo '

La liste des noms de domaine du serveur a bien été mis à jour.

Entrez le mot de passe root pour redémarrer le serveur:
';
			}
		}
	}
	else {
		if(isset($_SERVER["HTTP_USER_AGENT"])) {
			echo '<br>Erreur: Impossible de trouver le dossier des noms de domaine.<br>';
		}
		else {
			echo '

Erreur: Impossible de trouver le dossier des noms de domaine.

Entrez le mot de passe root pour redémarrer le serveur:
';
		}
	}
?>
php /Server/Server-Config/Host-AutoConfig.php
sudo /usr/sbin/apachectl graceful
sudo -k
logout
Merci de votre aide.
Salut,

En ligne de commande il n'y pas de serveur, c'est l'arborescence du système qui est utilisé.
Le dossier /Server/ ce trouve en réalité sûrement dans /etc/www/...
Ok, tous est indiquer en chemin absolu si je ne me trompe pas ?
Essaye ceci :
$f = new SplFileInfo($hosts_file_hosts);
echo $f->getRealPath()."\n";

Ça retourne le path complet du dossier. Normalement il ne devrait pas y a pas de différence entre server/cli.

EDIT : essaye aussi de le faire avec $hosts_directory
Modifié par jo_link_noir (08 Jan 2013 - 22:20)
Ce qui est étonnant, c'est que je peux depuis des scripts php stockés sur mon serveur "/Server"/ faire appel à des ressources se trouvant à la racine du disque: je veux dire par là que mon serveur ne considère pas "/Server" comme sa racine, il se comporte comme s'il était directement à la racine du disque. Par exemple:

/
L Server/
l L www/
l l L index.php
l l L medias
l l L style.css
l l L scripts
l l l L purge.php
l l l L reset.php
l l L pictures
l L Server-Config/
L Documents/
L Users

Si je veux utiliser la ressources /Server/www/scripts/purge.php depuis le fichier /Server/www/index.php

[Je finirais mon post plus tard désolé]