123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- <?php
- /**
- * 加载配置
- */
- function load_config()
- {
- $GLOBALS['cfg'] = include(CONFIG_FILE);
- }
- /**
- * 写入调试日志
- * @param string $msg 日志消息
- * @param string $type 日志级别
- * @param string $file 文件名
- * @return bool 操作状态
- */
- function debug_log($msg, $type = 'DEBUG', $file = 'debug')
- {
- global $cfg;
- $type = strtoupper($type);
- if (!in_array($type, $cfg['log_types'])) {
- return false;
- }
- $msg = is_scalar($msg) ? strval($msg) : json_encode($msg, JSON_UNESCAPED_UNICODE);
- $file = $cfg['log_path'] . '/' . $file . '.log';
- clearstatcache(true, $file);
- $flags = (file_exists($file) && filesize($file) >= $cfg['log_max_size']) ? 0 : FILE_APPEND;
- return file_put_contents($file, date("[Y-m-d H:i:s] ") . $type . ': ' . $msg . "\n", $flags);
- }
- /**
- * 确保只有一个实例在运行
- * @param int $lock 锁文件路径
- * @return resource 锁文件句柄
- */
- function run_single_instance($lock)
- {
- //打开文件(不存在创建,存在以写入方式打开,指针位于文件头,)
- $fh = fopen($lock, 'c');
- if (!$fh) {
- exit(1);
- }
- //尝试上锁
- if (!flock($fh, LOCK_EX | LOCK_NB)) {
- exit(0);
- }
- //截断文件
- ftruncate($fh, 0);
- //写入进程ID
- fwrite($fh, getmypid());
- fflush($fh);
- //返回
- return $fh;
- }
- /**
- * 使用cURL发送POST请求
- * @param string $url 请求地址
- * @param array $post POST数据数组
- * @param array $options HTTP选项数组
- * @param string $error 用于返回错误信息
- * @param int $errno 用于返回错误码
- * @param string $httpCode 用于返回响应的HTTP状态码
- * @param array $outHeaders 用于获得返回的HTTP头
- * @return mixed 成功返回请求返回结果,失败返回flase
- */
- function curl_post($url, $post = [], $options = [], &$error = false, &$errno = false, &$httpCode = false, $isupload = false, &$outHeaders = false)
- {
- $heads = array();
- $defaults = [
- CURLOPT_POST => 1,
- CURLOPT_URL => $url,
- CURLOPT_RETURNTRANSFER => 1,
- CURLOPT_CONNECTTIMEOUT => 5,
- CURLOPT_TIMEOUT => 10,
- CURLOPT_POSTFIELDS => ($isupload || is_string($post)) ? $post : http_build_query($post),
- ];
- if ($isupload) {
- $defaults[CURLOPT_SAFE_UPLOAD] = true;
- }
- if (is_array($outHeaders)) {
- $defaults[CURLOPT_HEADERFUNCTION] = function ($c, $v) use(&$outHeaders) {
- if(!empty(rtrim($v))) {
- list($field, $value) = explode(':', $v, 2);
- if ($field && $value) {
- $outHeaders[strtolower($field)] = trim($value);
- }
- }
- return strlen($v);
- };
- }
- $ch = curl_init();
- $result = '';
- if ($ch) {
- foreach ($options as $k=>$v) {
- $defaults[$k] = $v;
- }
- curl_setopt_array($ch, $defaults);
- $result = curl_exec($ch);
- if ($result === false) {
- if ($error !== false) {
- $error = curl_error($ch);
- }
- if ($errno !== false) {
- $errno = curl_errno($ch);
- }
- }
- if ($httpCode !== false) {
- $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
- }
- curl_close($ch);
- }
- return $result;
- }
- /**
- * 使用cURL发送GET请求
- * @param string $url 请求地址
- * @param array $post GET数据数组
- * @param array $options HTTP选项数组
- * @param string $error 用于返回错误信息
- * @param int $errno 用于返回错误码
- * @param string $httpCode 用于返回响应的HTTP状态码
- * @param array $outHeaders 用于获得返回的HTTP头
- * @return mixed 成功返回请求返回结果,失败返回flase
- */
- function curl_get($url, $get = [], $options = [], &$error = false, &$errno = false, &$httpCode = false, &$outHeaders = false)
- {
- $defaults = [
- CURLOPT_URL => $url. (strpos($url, '?') === FALSE ? '?' : '&'). http_build_query($get),
- CURLOPT_HEADER => 0,
- CURLOPT_RETURNTRANSFER => TRUE,
- CURLOPT_CONNECTTIMEOUT => 5,
- CURLOPT_TIMEOUT => 10,
- ];
- if (is_array($outHeaders)) {
- $defaults[CURLOPT_HEADERFUNCTION] = function ($c, $v) use(&$outHeaders) {
- if (!empty(rtrim($v))) {
- list($field, $value) = explode(':', $v, 2);
- if ($field && $value) {
- $outHeaders[strtolower($field)] = trim($value);
- }
- }
- return strlen($v);
- };
- }
- $ch = curl_init();
- $result = '';
- if ($ch) {
- foreach ($options as $k=>$v) {
- $defaults[$k] = $v;
- }
- curl_setopt_array($ch, $defaults);
- $result = curl_exec($ch);
- if ($result === false) {
- if ($error !== false) {
- $error = curl_error($ch);
- }
- if ($errno !== false) {
- $errno = curl_errno($ch);
- }
- }
- if ($httpCode !== false) {
- $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
- }
- curl_close($ch);
- }
- return $result;
- }
|