Esempio n. 1
0
<?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';
Esempio n. 2
0
 /**
  * スクリプトシャットダウン時のログ処理
  *
  * <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;
     }
 }
Esempio n. 3
0
 * <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;
Esempio n. 4
0
 /**
  * 最後のエラーを取得
  *
  * <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>";
         }
     }
 }
Esempio n. 5
0
 /**
  * リソースリクエスト
  *
  * @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;
 }