= $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; }