Laděnka a ini_set

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
AdamSurak
Člen | 16
+
0
-

Zdravím,

Narazil jsem na problém při deploymentu jednoho webu. Na serveru byl zapnutý safe_mod a vypnuté snad všechny funkce co v PHP jsou. Mezi nimi bohužel ini_set. Projevilo se to tak, že Laděnka nešla nastavit do PRODUCTION módu a v DEVELOPMENT neustále vyhazovala Red screen.

Myslím, že by problém mohl být v Debug.php na řádku 465 (z GITu, v 1.0-dev je to 461), konkrétně:

<?php
 // logging configuration
if (self::$productionMode && $logFile !== FALSE) {
self::$logFile = 'log/php_error.log';

if (class_exists(/*Nette\*/'Environment')) {
if (is_string($logFile)) {
self::$logFile = Environment::expand($logFile);

} else try {
self::$logFile = Environment::expand('%logDir%/php_error.log');

} catch (/*\*/InvalidStateException $e) {
}

} elseif (is_string($logFile)) {
self::$logFile = $logFile;
}
//
// TOHLE JE ON
ini_set('error_log', self::$logFile); // TOHLE JE ON
//
//
}

// php configuration
if (function_exists('ini_set')) {
ini_set('display_errors', !self::$productionMode); // or 'stderr'
ini_set('html_errors', !self::$logFile && !self::$consoleMode);
ini_set('log_errors', (bool) self::$logFile);

} elseif (ini_get('log_errors') != (bool) self::$logFile || // intentionally ==
(ini_get('display_errors') != !self::$productionMode && ini_get('display_errors') !== (self::$productionMode ? 'stderr' : 'stdout'))) {
throw new /*\*/LogicException('Function ini_set() must be enabled.');
}
?>

Ověření povolení ini_set se totiž provádí až posléze.

paranoiq
Člen | 392
+
0
-

s menšími úpravami funguje v produkčním módu laděnka i bez ini_set(). stačí v Debug::enable() zakomentovat celou sekci s konfigurací a ini_set()

laděnku je pak nutné používat v mailovacím režimu. do logovacího souboru možná něco píše, ale ten je kdo ví kde. soubory s výjimkami a monitor soubor zakládá správně

(hodí se pro takové tragické služby jako třeba Český Hosting)