<?php require_once 'App.php'; include_once _BEAR_APP_HOME . '/App/data/dev.config.php'; if (!$isSet) { Panda::error('現在利用できません。', 'dev.config.phpファイルを編集して設定を完了させてください', _BEAR_APP_HOME . '/App/data/dev.config.php'); exit; } /** * Put this file in a web-accessible directory as index.php (or similar) * and point your webbrowser to it. */ // OPTIONAL: If you have protected this webfrontend with a password in a // custom way, then uncomment to disable the 'not protected' warning: $pear_frontweb_protected = true; /*********************************************************** * Following code tests $pear_dir and loads the webfrontend: */ if (!file_exists($pear_dir . '/PEAR.php')) { trigger_error('No PEAR.php in supplied PEAR directory: (PEARディレクトリにPEAR.phpがありません)' . $pear_dir, E_USER_ERROR); } ini_set('include_path', $pear_dir); require_once 'PEAR.php'; // Include WebInstaller putenv('PHP_PEAR_INSTALL_DIR=' . $pear_dir); // needed if unexisting config require_once 'pearfrontendweb.php';
/** * スクリプトシャットダウン時のログ処理 * * <pre> * アプリケーションログ、smartyアサインログ、グローバル変数ログ、 * リクエストURIをシリアライズしてファイル保存します。 * デバックモードの時のみ使用します。 * 保存されたログは/__bear/のLogタブでブラウズできます。 * シャットダウン時実行のメソッドとしてフレームワーク内で登録され、 * スクリプト終了時に実行されます。 * フレームワーク内で使用されます。 * </pre> * * @return void * @ignore * @throws BEAR_Log_Exception */ public function shutdownDebug($return = true) { if (PHP_SAPI === 'cli') { return; } if (strpos($_SERVER['REQUEST_URI'], '__bear/') !== false) { return; } restore_error_handler(); error_reporting(0); try { $isBeardev = isset($_SERVER['__bear']); $pageLogPath = _BEAR_APP_HOME . '/logs/' . 'debug' . '.log'; file_put_contents($pageLogPath, $this->_config['debug']); if ($isBeardev || PHP_SAPI === 'cli') { return; } $log = array(); $pageLogPath = _BEAR_APP_HOME . '/logs/page.log'; if (file_exists($pageLogPath) && !is_writable($pageLogPath)) { // 書き込み権限のエラー Panda::error('Permission denied.', "[{$pageLogPath}] is not writable."); return; } // page ログ $pageLog = file_exists($pageLogPath) ? BEAR_Util::unserialize(file_get_contents($pageLogPath)) : ''; // show_vars if (!function_exists('show_vars')) { include 'BEAR/vendors/debuglib.php'; } $log['var'] = show_vars('trim_tabs:2;show_objects:1;max_y:100;avoid@:1; return:1'); if (class_exists('BEAR_Smarty', false)) { $smarty = BEAR::dependency('BEAR_Smarty'); unset($smarty->_tpl_vars['content_for_layout']); $log['smarty'] = $smarty->_tpl_vars; } else { $log['smarty'] = ''; } $oldPageLog = isset($pageLog['page']) ? $pageLog['page'] : array(); $newPageLog = array('page' => $this->_logs, 'uri' => $_SERVER['REQUEST_URI']); $oldPageLog[] = $newPageLog; if (count($oldPageLog) > 3) { array_shift($oldPageLog); } $log += array('page' => $oldPageLog, 'include' => get_included_files(), 'class' => get_declared_classes()); if (isset($_SERVER['REQUEST_URI'])) { $log += array('uri' => $_SERVER['REQUEST_URI']); } $reg = BEAR_Util::getObjectVarsRecursive(BEAR::getAll()); $log['reg'] = $reg; if ($return === true) { return $log; } else { file_put_contents($pageLogPath, serialize($log)); } } catch (Exception $e) { throw $e; } }
* <code>sudo pear install Text_Highlighter</code> * * トラブルシューティング * * failed to open stream: Permission denied エラーが出たファイルに644のパーミッションを与えてください * */ require_once 'App.php'; $_SERVER['__bear'] = 1; $configPath = _BEAR_APP_HOME . '/App/data/dev.config.php'; if (!file_exists($configPath)) { Panda::error('現在利用できません。', 'debug用設定ファイルが設置されてるか確認してください', array('設定ファイル' => _BEAR_APP_HOME . '/App/data/dev.config.php')); } else { include_once $configPath; if (!isset($isSet) || !$isSet) { Panda::error('現在利用できません。', 'debug用設定ファイルを編集して設定を完了させてください', array('設定ファイル' => _BEAR_APP_HOME . '/App/data/dev.config.php')); exit; } } ?> <style type="text/css"> .hl-main { font-family: monospace; } .hl-default { color: #000000; } .hl-code { color: #7f7f33;
/** * 最後のエラーを取得 * * <pre> * _errorクエリーで最後のエラーを表示させます。 * エラー表示がうまく行かない時に使用します。 * </pre> * * <code> * ?_error エラー表示 * ?_error=koriyama@bear-project.net エラーメール送信 * ?_error=/tmp/error.log エラーログファイルを書き込み * </code> * * @return void */ public static function onShutdownDebug() { if (function_exists('FB')) { $errors = Panda::getOuterPathErrors(); FB::group('errors', array('Collapsed' => true, 'Color' => 'gray')); foreach ($errors as $code => $error) { switch (true) { case $code == E_WARNING || $code == E_USER_WARNING: $fireLevel = FirePHP::WARN; break; case $code == E_NOTICE || $code == E_USER_NOTICE: $fireLevel = FirePHP::INFO; break; case $code == E_STRICT || $code == E_DEPRECATED: $fireLevel = FirePHP::LOG; break; default: $fireLevel = FirePHP::ERROR; break; } FB::send($error, '', $fireLevel); } FB::groupEnd(); } $lastError = error_get_last(); $err = print_r($lastError, true); if (isset($_GET['_error'])) { $errorTo = $_GET['_error']; if ($errorTo == '') { $errorCode = Panda::$phpError[$lastError['type']]; Panda::error("{$errorCode} (Last Error)", "{$lastError['message']}", '', (array) $lastError); return; } elseif (strpos($errorTo, '@')) { error_log($err, 1, $errorTo); } elseif (is_writable(dirname($errorTo))) { error_log("{$err}\n\n", 3, $errorTo); } else { echo "<p style=\"color:red\">Error: Invalid destination for _error [{$errorTo}]</p>"; } } }
/** * リソースリクエスト * * @return BEAR_Ro * @throws Exception Ro内部で発生した例外 */ public function request() { $uri = $this->_config['uri']; $values = $this->_config['values']; $options = $this->_config['options']; // URIのクエリーと$valuesをmerge $parse = parse_url($uri); if (!isset($parse['scheme'])) { $this->_mergeQuery($uri, $values); } $isNotRead = $this->_config['method'] !== BEAR_Resource::METHOD_READ; if (!$isNotRead) { $hasCsrfOption = false; } elseif (isset($options[BEAR_Resource::OPTION_CSRF]) && $options[BEAR_Resource::OPTION_CSRF] === true) { // リソースリクエストオプション $hasCsrfOption = true; } elseif ($this->_config[BEAR_Resource::OPTION_CSRF] === true) { // yaml $hasCsrfOption = true; } else { $hasCsrfOption = false; } if (!$isNotRead) { $hasPoeOption = false; } elseif (isset($options[BEAR_Resource::OPTION_POE]) && $options[BEAR_Resource::OPTION_POE] === true) { // リソースリクエストオプション $hasPoeOption = true; } elseif ($this->_config[BEAR_Resource::OPTION_POE] === true) { // yaml $hasPoeOption = true; } else { $hasPoeOption = false; } if ($hasCsrfOption || $hasPoeOption) { $formToken = BEAR::dependency('BEAR_Form_Token'); /* @var $formToken BEAR_Form_Token */ $isTokenCsrfValid = $hasCsrfOption ? $formToken->isTokenCsrfValid() : true; if ($isTokenCsrfValid !== true) { throw $this->_exception('CSRF'); } $isTokenPoeValid = $hasPoeOption ? $formToken->isTokenPoeValid() : true; if ($isTokenPoeValid !== true) { $headers = array('request config' => $this->_config, 'msg' => 'invalid token'); $code = BEAR::CODE_BAD_REQUEST; $config = compact('headers', 'code'); $ro = BEAR::factory('BEAR_Ro', $config); $ro->setConfig('uri', $uri); $ro->setConfig('values', $values); $ro->setConfig('options', $options); return $ro; } else { $formToken->newSessionToken(); } } $config = $this->_config; $config['uri'] = $uri; $config['values'] = $values; $resourceRequestCache = BEAR::factory('BEAR_Resource_Request_Cache', $config); try { $ro = $resourceRequestCache->request(); // 中で例外が発生しなかったらPOEオプションで使ったトークンを使用済みにマークする // @todo staticコールを廃止 // BEAR_Form::finishTokens(); /* @todo 下のifブロックを置き換える $isOkRo = ($ro instanceof BEAR_Ro && $ro->getCode() === BEAR::CODE_OK); $isNotRo = ($ro instanceof BEAR_Ro === false); if (!$isOkRo && $isNotRo) { $body = $ro; $ro = BEAR::factory('BEAR_Ro'); $ro->setBody($body); } */ if ($ro instanceof BEAR_Ro && $ro->getCode() === BEAR::CODE_OK) { // $options ポストプロセスクラス } elseif ($ro instanceof BEAR_Ro === false) { $body = $ro; $ro = BEAR::factory('BEAR_Ro'); $ro->setBody($body); } $request = "{$this->_config['method']} {$uri}" . ($values ? '?' . http_build_query($values) : ''); self::_actionPostProcess($ro); } catch (Exception $e) { if (get_class($e) === 'Panda_Exception') { // HTTPエラー画面 Panda::onException($e); throw $e; } if (BEAR::exists('page')) { $page = BEAR::get('page'); if (method_exists($page, 'onException')) { $page->onException($e); } } if ($this->_config['debug']) { $info = method_exists($e, 'getInfo') ? $e->getInfo() : ''; Panda::error(get_class($e), $e->getCode() . ' ' . $e->getMessage(), $info); } //エラー (400=bad requset, or 500=server error $trace = $e->getTrace(); $refTrace =& $trace; $trace = array_shift($refTrace); if (isset($trace['args'])) { $args = $trace['args']; } else { $args = ''; } $headers = array(); $exception = array('class' => get_class($e), 'msg' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()); $headers['_exception'] = $exception; if (method_exists($e, 'getInfo')) { $headers['_info'] = $e->getInfo(); } $ro = BEAR::factory('BEAR_Ro'); $ro->setHeaders($headers)->setCode($e->getCode()); } if ($this->_config['debug']) { BEAR::dependency('BEAR_Ro_Debug', $this->_config)->debugShowResource($ro); } return $ro; }