Arrêt prématuré d'un script

Petit nouveau ! | 5 Messages

12 sept. 2008, 06:30

Bonjour, je suis en train de créer un site internet "from scratch" et j'ai un petit problème depuis quelques temps que je n'arrive pas à résoudre. En effet, la page reste blanche et l'exécution du script s'arrête prématurément, quoique je fasse. J'ai installé un petit moteur pour obtenir des infos de debuggage, et j'ai bien remarquer que le script s'arrête sans raison lors de l'inclusion d'un fichier (l'instruction précédente fonctionne encore, et le fichier n'est pas indiquer comme inclut).

J'avais déjà certains problèmes comme cela, et ça venait du fait de la structure du fichier à inclure, mais la j'ai beau chercher je ne trouve rien!

Voila le log d'erreur en entier [URL supprimée] ou plus simplement [URL supprimée] pour n'afficher que les fichiers incluent.

Et voici le fichier qui ne veut pas être inclut et provoque un arrêt (sans erreur, notice, exception ou même erreur du CGI) du script :
<?php
if(!defined("Core")) {
	require_once("core/error.php");
	exit(error(E_INCLUDE_ERROR, "", __FILE__, 0));
}

function send_event($component, $state) {
	if (debug::component_profiled($component)) {
		register_tick_function(array("debug", "profiling_component"),
			$component, $state);
		
		debug::profile($component, $state);
		
		declare (ticks = 1) {
			require("components/" .
				$component . "/run.php");
		}
		
		debug::profile($component, $state);
		unregister_tick_function(array("debug", "profiling_component"));
	}
	else {
		require("components/" .
			$component . "/run.php");
	}
}

function special_events($events, $state, $component) {
	if ($events == null) {
		return;
	}
	$events = explode (";", $events);
	$arg = $state;
	$text = null;
	foreach($events as $event) {
		$state .= ":" . $event;
		send_event($component, $state);
		$state = $arg;
	}
}

function admin_event($events, $state, $component) {
	if (! defined("admin")) {
		return;
	}
	$state .= ":ADMIN";
	send_event($component, $state);
	special_events($events, $state, $component);
}

function components($state) {
	$stmt = $GLOBALS['db']->query("SELECT components, events
		FROM " . prefix . "_page
		WHERE name='" . page . "'");
	$data = $stmt->fetch(PDO::FETCH_OBJ);
	$stmt->closeCursor();
	
	if (defined("event_eq_tpl") &&
		event_eq_tpl == $state) {
		
		send_event("tpl_mgr", "SHOW;" . tpl . ";");
	}
	
	$components = explode(";", $data->components);
	
	foreach($components as $component) {
		send_event($component, $state);
		special_events($data->events, $state, $component);
		admin_event($data->events, $state, $component);
	}
}

abstract class component {
	protected $events;
	protected $config;
	private static $stmt_events = null;
	private static $stmt_config = null;
	
	public function __construct($component) {
		$layout = layout;
		if(defined("layout_real")) {
			$layout = layout_real;
		}
		if (self::$stmt_events == null &&
			self::$stmt_config == null) {
			
			self::$stmt_events = $GLOBALS['db']->prepare("SELECT *
				FROM " . prefix . "_component_layout_event
				WHERE component=':component'
				AND layout='" . $layout . "'");
			self::$stmt_events->bindParam(':component', $component);
			
			self::$stmt_config = $GLOBALS['db']->prepare("SELECT *
				FROM " . prefix . "_components
				WHERE name=':component'");
			self::$stmt_config->bindParam(':component', $component);
		}
		
		self::$stmt_events->execute();
		$data = self::$stmt_events->fetch(PDO::FETCH_OBJ);
		self::$stmt_events->closeCursor();
		$this->events = explode(";", $data->events);
		
		self::$stmt_config->execute();
		$data = self::$stmt_config->fetch(PDO::FETCH_OBJ);
		self::$stmt_config->closeCursor();
		$this->config = explode ("|", $data->config);
	}
	public function run($action);
}

abstract class plug_here extends component {
	protected $plugins;
	private static $stmt = null;
	protected function __construct($component) {
		if (self::$stmt == null) {
			self::$stmt = $GLOBALS['db']->prepare("SELECT version
				FROM " . prefix . "_components
				WHERE name=':component'");
			self::$stmt->bindParam(':component', $component);
		}
		parent::__construct($component);
		self::$stmt->execute();
		$data = self::$stmt->fetch(PDO::FETCH_OBJ);
		$version = $data->version;
		
		$this->plugins = array();
		$plugins = getfiles("components/" . $component . "/plugins/",
			"php");
		foreach($plugins as $plugin):
			require_once($plugin);
			$plugin_name = substr($plugin, 0, strlen(
				"components/" . $component . "/plugins/"));
			$this->plugins[] = $plugin_name;
			eval($plugin_name . "::init(" . $version . ");");
		endforeach;
	}
	protected function plug_point($point) {
		foreach($this->plugins as $plugin):
			eval($plugin . "::plug_point(" . $point . ");");
		endforeach;
	}
}

abstract class plugin {
	abstract static protected $name;
	abstract static protected $version;
	abstract static protected $component;
	static public function init($version) {
		if (self::version_matches($version) &&
			self::sql_inited($version)) {
			
		}
	}
	static private function version_matches($version) {
		if ((is_array(self::$version) &&
			in_array($version, self::$version) ||
			$version == self::$version)):
			
			return true;
		endif;
		return false;
	}
	static private function db_inited($version) {
		
	}
}
?>
Merci d'avance!
Modifié en dernier par Geoffroy57 le 24 mars 2011, 10:43, modifié 1 fois.

ViPHP
ViPHP | 5924 Messages

12 sept. 2008, 07:16

C'est une parse error…

Mammouth du PHP | 19672 Messages

12 sept. 2008, 08:35

Si ce fichier n'est pas inclus, l'erreur est forcément en amont, à priori dans l'inclusion précédente. Difficile de la voir sur celui-ci. :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 5 Messages

12 sept. 2008, 18:14

l'instruction précédente était pour un test echo"" et elle a fonctionner.
Sinon hors mis ce test, il y a une inclusion, mais que l'on retrouve dans les informations de débuggage, sachant que tout fichier inclut n'y apparait qu'au retour de cette fonction, le problème ne vient donc pas de la, mais bien du fichier.
Une parse error, oui je pense aussi, mais je n'ai pas réussi à la déterminer, donc si vous pouviez m'aider svp!

Merci tout de même pour ces réponses

ViPHP
ViPHP | 5924 Messages

12 sept. 2008, 18:20

Bah tu passes l'url du fichier incriminé (le fichier inclu) directement dans ton navigateur…

Petit nouveau ! | 5 Messages

12 sept. 2008, 23:35

merci, j'avais pas penser à cette technique :)

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

13 sept. 2008, 00:05

La seule partie qui peut provoquer l'arrêt de ton script présenté est le premier test :
if(!defined("Core")) {
    require_once("core/error.php");
    exit(error(E_INCLUDE_ERROR, "", __FILE__, 0));
} 
donc si les scripts précédant l'appel de ce fichier ne définissent pas la constante "Core" le script s'arrête (exit)

D'ailleurs ça sera un arrêt immédiat de ton script si tu suis ce qu'a préconisé Sékiltoyai
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène