run 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #!/usr/bin/env php
  2. <?php
  3. /**
  4. * 入口文件
  5. *
  6. * 腾讯云函数版本维护:
  7. * 1、去掉顶部的 “#!/usr/bin/env php”,将文件名改为 index.php
  8. * 2、将 “define('IS_SCF', false);” 改为 “define('IS_SCF', true);”
  9. * 3、使用 function main_handler($event, $context) {} 将下面的 try catch 部分包起来,
  10. * 并在 try 最后一行追加 “return '云函数执行成功。';”,在 main_handler 函数的最后一行追加 “return '云函数执行失败。';”
  11. *
  12. * @author mybsdc <[email protected]>
  13. * @date 2019/3/2
  14. * @time 11:05
  15. * @link https://github.com/luolongfei/freenom
  16. */
  17. error_reporting(E_ERROR);
  18. ini_set('display_errors', 1);
  19. set_time_limit(0);
  20. define('IS_SCF', false); // 是否腾讯云函数环境
  21. define('IS_CLI', PHP_SAPI === 'cli');
  22. define('DS', DIRECTORY_SEPARATOR);
  23. define('ROOT_PATH', realpath(__DIR__));
  24. define('VENDOR_PATH', realpath(ROOT_PATH . '/vendor'));
  25. define('APP_PATH', realpath(ROOT_PATH . '/app'));
  26. define('DATA_PATH', IS_SCF ? '/tmp' : realpath(ROOT_PATH . '/app/Data')); // 腾讯云函数只有 /tmp 目录的读写权限
  27. define('RESOURCES_PATH', realpath(ROOT_PATH . '/resources'));
  28. date_default_timezone_set('Asia/Shanghai');
  29. /**
  30. * 注册错误处理
  31. */
  32. register_shutdown_function('customize_error_handler');
  33. /**
  34. * 注册异常处理
  35. */
  36. set_exception_handler('exception_handler');
  37. require VENDOR_PATH . '/autoload.php';
  38. use Luolongfei\Libs\Log;
  39. use Luolongfei\Libs\Message;
  40. /**
  41. * @throws Exception
  42. */
  43. function customize_error_handler()
  44. {
  45. if (!is_null($error = error_get_last())) {
  46. Log::error('程序意外终止', $error);
  47. Message::send('具体情况我也不清楚,请查看服务器日志定位问题。', '主人,程序意外终止');
  48. }
  49. }
  50. /**
  51. * @param \Exception $e
  52. *
  53. * @throws \Exception
  54. */
  55. function exception_handler($e)
  56. {
  57. Log::error('未捕获的异常:' . $e->getMessage());
  58. Message::send("具体的异常内容是:\n" . $e->getMessage(), '主人,未捕获的异常');
  59. }
  60. try {
  61. system_check();
  62. $class = sprintf('Luolongfei\App\Console\%s', get_argv('c', 'FreeNom'));
  63. $fn = get_argv('m', 'handle');
  64. $class::getInstance()->$fn();
  65. } catch (\Exception $e) {
  66. system_log(sprintf('执行出错:<red>%s</red>', $e->getMessage()), $e->getTrace());
  67. Message::send("执行出错:\n" . $e->getMessage(), '主人,捕获异常');
  68. }