12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076 |
- <?php
- defined('ONLY_ONLY_ONLY') or exit('Access Denied');
- function crossdomain_cookie_init()
- {
- $maxlifetime = 0;
- $secure = true;
- $httponly = true;
- $samesite = 'None';
- if (PHP_VERSION_ID < 70300) {
- session_set_cookie_params($maxlifetime, '/; samesite=' . $samesite, $_SERVER['HTTP_HOST'], $secure, $httponly);
- } else {
- session_set_cookie_params([
- 'lifetime' => $maxlifetime,
- 'path' => '/',
- 'secure' => $secure,
- 'httponly' => $httponly,
- 'samesite' => $samesite,
- ]);
- }
- }
- function input_getPostObj()
- {
- $httpdata = file_get_contents("php://input");
- $ajaxdata = @json_decode($httpdata, true);
- if (empty($ajaxdata)) {
- parse_str($httpdata, $ajaxdata);
- }
- return $ajaxdata;
- }
- function base_stripslashes_deep($value)
- {
- $value = is_array($value) ? array_map('base_stripslashes_deep', $value) : stripslashes($value);
- return $value;
- }
- function base_irequestsplite($var)
- {
- if (is_array($var)) {
- foreach ($var as $key => $value) {
- $var[htmlspecialchars($key)] = base_irequestsplite($value);
- }
- } else {
- $var = str_replace('&', '&', htmlspecialchars($var, ENT_QUOTES));
- }
- return $var;
- }
- function input_param_handle($preHandle = true)
- {
- $GET = $_GET;
- $POST = $_POST;
- $COOKIE = $_COOKIE;
- $REQUEST = $_REQUEST;
- if ($preHandle) {
- $GET = array_map('base_stripslashes_deep', $_GET);
- $POST = array_map('base_stripslashes_deep', $_POST);
- $COOKIE = array_map('base_stripslashes_deep', $_COOKIE);
- $REQUEST = array_map('base_stripslashes_deep', $_REQUEST);
- }
- $_GPC = array();
- $_GPC = array_merge($GET, $POST, $_GPC);
- if ($preHandle) {
- $_GPC = base_irequestsplite($_GPC);
- }
- return $_GPC;
- }
- function input_file_errhandle($filectl)
- {
- $fileerror = intval($filectl["error"]);
- if ($fileerror > 0) {
- switch ($fileerror) {
- case 1: //UPLOAD_ERR_INI_SIZE
- $err_msg = "上传的文件超过了 php.ini 中 upload_max_filesize选项限制的值";
- break;
- case 2: //UPLOAD_ERR_FORM_SIZE
- $err_msg = "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
- break;
- case 3: //UPLOAD_ERR_PARTIAL
- $err_msg = "文件只有部分被上传";
- break;
- case 4: //UPLOAD_ERR_NO_FILE
- $err_msg = "文件没有被上传";
- break;
- case 5: //UPLOAD_ERR_NO_TMP_DIR
- $err_msg = "找不到临时文件夹";
- break;
- case 6: //UPLOAD_ERR_CANT_WRITE
- $err_msg = "文件写入失败";
- break;
- default:
- $err_msg = "未知错误";
- break;
- }
- throw new Exception("上传失败:" . $err_msg);
- }
- }
- function input_file_upload($filectl_name, $subdir, $filename = "", $maxsize = 10 * 1024 * 1024, $filetypes = "jpg|png|jpeg|gif")
- {
- if (!isset($_FILES[$filectl_name])) {
- $GPC = input_param_handle(false);
- $ajaxdata = input_getPostObj();
- $tmpfilectl_name = isset($ajaxdata[$filectl_name]) ? $ajaxdata[$filectl_name] : $GPC[$filectl_name];
- if (empty($tmpfilectl_name) || !isset($_FILES[$tmpfilectl_name])) {
- throw new GeneralException("", "没有定位到文件控件或文件内容为空,请核查!!");
- }
- $filectl_name = $tmpfilectl_name;
- }
- $filectl = $_FILES[$filectl_name];
- input_file_errhandle($filectl);
- $filetype = $filectl["type"];
- $filesize = $filectl["size"];
- if ($filesize > $maxsize) {
- throw new GeneralException("", "上传失败:文件不能超过" . ($maxsize / 1024) . "KB,请您核查一下是否上传错了:)");
- }
- $fileex = pathinfo($filectl["name"])['extension'];
- if (empty($filetypes) || (mb_strpos($filetypes, strtolower($fileex) . "|") !== false)) {
- $dest_urldir = WEB_URL_FILEROOT . (empty($subdir) ? "" : "/" . $subdir);
- $dest_phydir = WEB_PHY_FILEROOT . (empty($subdir) ? "" : "/" . $subdir);
- is_dir($dest_phydir) or mkdir($dest_phydir, 0755, false);
- if (empty($filename)) {
- do {
- $filename = 'file_' . rand(123456, 9999) . "." . $fileex;
- $file_relative_path = $dest_urldir . "/" . $filename;
- $file_physical_path = $dest_phydir . "/" . $filename;
- } while (is_file($file_physical_path));
- } else {
- $file_relative_path = $dest_urldir . "/" . $filename;
- $file_physical_path = $dest_phydir . "/" . $filename;
- }
- $filetmp_name = $filectl["tmp_name"];
- if (move_uploaded_file($filetmp_name, $file_physical_path)) {
- } else {
- throw new GeneralException("", "图片上传保存时失败");
- }
- return $file_relative_path;
- } else {
- throw new GeneralException("", "上传失败:图片文件只能是" . $filetypes . "格式");
- }
- }
- /*****************/
- function random($length, $numeric = false)
- {
- $seed = base_convert(md5(microtime() . $_SERVER['DOCUMENT_ROOT']), 16, $numeric ? 10 : 35);
- $seed = $numeric ? (str_replace('0', '', $seed) . '012340567890') : ($seed . 'zZ' . strtoupper($seed));
- if ($numeric) {
- $hash = '';
- } else {
- $hash = chr(rand(1, 26) + rand(0, 1) * 32 + 64);
- $length--;
- }
- $max = strlen($seed) - 1;
- for ($i = 0; $i < $length; $i++) {
- $hash .= $seed[mt_rand(0, $max)];
- }
- return $hash;
- }
- /******http通信处理******/
- function http_post($url, $header = array(), $post_data, $withpem = false, $client_cert_pem = '', $client_cert_key = '', $cert_pwd = '')
- {
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_TIMEOUT, 10); //10秒超时
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
- curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1');
- if ($withpem) { //证书相关
- curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
- curl_setopt($ch, CURLOPT_SSLCERT, '' . $client_cert_pem . '');
- curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
- curl_setopt($ch, CURLOPT_SSLKEY, '' . $client_cert_key . '');
- curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $cert_pwd);
- curl_setopt($ch, CURLOPT_KEYPASSWD, $cert_pwd);
- }
- $data = curl_exec($ch);
- $error_no = curl_errno($ch);
- $err_msg = "";
- curl_close($ch);
- if (!empty($error_no)) {
- $err_msg = http_curl_geterr($error_no);
- eeglobal_log_handler('http_post', 'error', "http_post通信异常 err_msg=>$err_msg result=>$data");
- throw new GeneralException("http_post", "http_post通信异常");
- }
- return $data;
- }
- function http_get($url, $header = array())
- {
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_HEADER, 0);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
- curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1');
- $data = curl_exec($ch);
- $error_no = curl_errno($ch);
- $err_msg = "";
- curl_close($ch);
- if (!empty($error_no)) {
- $err_msg = http_curl_geterr($error_no);
- eeglobal_log_handler('http_get', 'error', "http_get通信异常 err_msg=>$err_msg result=>$data");
- throw new GeneralException("http_get", 'http_get通信异常');
- }
- return $data;
- }
- function http_curl_geterr($no)
- {
- $error_codes = array(
- '1' => 'CURLE_UNSUPPORTED_PROTOCOL (1) – 您传送给 libcurl 的网址使用了此 libcurl 不支持的协议。 可能是您没有使用的编译时选项造成了这种情况(可能是协议字符串拼写有误,或没有指定协议 libcurl 代码)。',
- '2' => 'CURLE_FAILED_INIT (2) – 非常早期的初始化代码失败。 可能是内部错误或问题。',
- '3' => 'CURLE_URL_MALFORMAT (3) – 网址格式不正确。',
- '5' => 'CURLE_COULDNT_RESOLVE_PROXY (5) – 无法解析代理服务器。 指定的代理服务器主机无法解析。',
- '6' => 'CURLE_COULDNT_RESOLVE_HOST (6) – 无法解析主机。 指定的远程主机无法解析。',
- '7' => 'CURLE_COULDNT_CONNECT (7) – 无法通过 connect() 连接至主机或代理服务器。',
- '8' => 'CURLE_FTP_WEIRD_SERVER_REPLY (8) – 在连接到 FTP 服务器后,libcurl 需要收到特定的回复。 此错误代码表示收到了不正常或不正确的回复。 指定的远程服务器可能不是正确的 FTP 服务器。',
- '9' => 'CURLE_REMOTE_ACCESS_DENIED (9) – 我们无法访问网址中指定的资源。 对于 FTP,如果尝试更改为远程目录,就会发生这种情况。',
- '11' => 'CURLE_FTP_WEIRD_PASS_REPLY (11) – 在将 FTP 密码发送到服务器后,libcurl 需要收到正确的回复。 此错误代码表示返回的是意外的代码。',
- '13' => 'CURLE_FTP_WEIRD_PASV_REPLY (13) – libcurl 无法从服务器端收到有用的结果,作为对 PASV 或 EPSV 命令的响应。 服务器有问题。',
- '14' => 'CURLE_FTP_WEIRD_227_FORMAT (14) – FTP 服务器返回 227 行作为对 PASV 命令的响应。如果 libcurl 无法解析此行,就会返回此代码。',
- '15' => 'CURLE_FTP_CANT_GET_HOST (15) – 在查找用于新连接的主机时出现内部错误。',
- '17' => 'CURLE_FTP_COULDNT_SET_TYPE (17) – 在尝试将传输模式设置为二进制或 ascii 时发生错误。',
- '18' => 'CURLE_PARTIAL_FILE (18) – 文件传输尺寸小于或大于预期。当服务器先报告了一个预期的传输尺寸,然后所传送的数据与先前指定尺寸不相符时,就会发生此错误。',
- '19' => 'CURLE_FTP_COULDNT_RETR_FILE (19) – ‘RETR’ 命令收到了不正常的回复,或完成的传输尺寸为零字节。',
- '21' => 'CURLE_QUOTE_ERROR (21) – 在向远程服务器发送自定义 “QUOTE” 命令时,其中一个命令返回的错误代码为 400 或更大的数字(对于 FTP),或以其他方式表明命令无法成功完成。',
- '22' => 'CURLE_HTTP_RETURNED_ERROR (22) – 如果 CURLOPT_FAILONERROR 设置为 TRUE,且 HTTP 服务器返回 >= 400 的错误代码,就会返回此代码。 (此错误代码以前又称为 CURLE_HTTP_NOT_FOUND。)',
- '23' => 'CURLE_WRITE_ERROR (23) – 在向本地文件写入所收到的数据时发生错误,或由写入回调 (write callback) 向 libcurl 返回了一个错误。',
- '25' => 'CURLE_UPLOAD_FAILED (25) – 无法开始上传。 对于 FTP,服务器通常会拒绝执行 STOR 命令。错误缓冲区通常会提供服务器对此问题的说明。 (此错误代码以前又称为 CURLE_FTP_COULDNT_STOR_FILE。)',
- '26' => 'CURLE_READ_ERROR (26) – 读取本地文件时遇到问题,或由读取回调 (read callback) 返回了一个错误。',
- '27' => 'CURLE_OUT_OF_MEMORY (27) – 内存分配请求失败。此错误比较严重,若发生此错误,则表明出现了非常严重的问题。',
- '28' => 'CURLE_OPERATION_TIMEDOUT (28) – 操作超时。 已达到根据相应情况指定的超时时间。',
- '30' => 'CURLE_FTP_PORT_FAILED (30) – FTP PORT 命令返回错误。 在没有为 libcurl 指定适当的地址使用时,最有可能发生此问题。 请参阅 CURLOPT_FTPPORT。',
- '31' => 'CURLE_FTP_COULDNT_USE_REST (31) – FTP REST 命令返回错误。如果服务器正常,则应当不会发生这种情况。',
- '33' => 'CURLE_RANGE_ERROR (33) – 服务器不支持或不接受范围请求。',
- '34' => 'CURLE_HTTP_POST_ERROR (34) – 此问题比较少见,主要由内部混乱引发。',
- '35' => 'CURLE_SSL_CONNECT_ERROR (35) – 同时使用 SSL/TLS 时可能会发生此错误。您可以访问错误缓冲区查看相应信息,其中会对此问题进行更详细的介绍。可能是证书(文件格式、路径、许可)、密码及其他因素导致了此问题。',
- '36' => 'CURLE_FTP_BAD_DOWNLOAD_RESUME (36) – 尝试恢复超过文件大小限制的 FTP 连接。',
- '37' => 'CURLE_FILE_COULDNT_READ_FILE (37) – 无法打开 FILE:// 路径下的文件。原因很可能是文件路径无法识别现有文件。 建议您检查文件的访问权限。',
- '38' => 'CURLE_LDAP_CANNOT_BIND (38) – LDAP 无法绑定。LDAP 绑定操作失败。',
- '39' => 'CURLE_LDAP_SEARCH_FAILED (39) – LDAP 搜索无法进行。',
- '41' => 'CURLE_FUNCTION_NOT_FOUND (41) – 找不到函数。 找不到必要的 zlib 函数。',
- '42' => 'CURLE_ABORTED_BY_CALLBACK (42) – 由回调中止。 回调向 libcurl 返回了 “abort”。',
- '43' => 'CURLE_BAD_FUNCTION_ARGUMENT (43) – 内部错误。 使用了不正确的参数调用函数。',
- '45' => 'CURLE_INTERFACE_FAILED (45) – 界面错误。 指定的外部界面无法使用。 请通过 CURLOPT_INTERFACE 设置要使用哪个界面来处理外部连接的来源 IP 地址。 (此错误代码以前又称为 CURLE_HTTP_PORT_FAILED。)',
- '47' => 'CURLE_TOO_MANY_REDIRECTS (47) – 重定向过多。 进行重定向时,libcurl 达到了网页点击上限。请使用 CURLOPT_MAXREDIRS 设置上限。',
- '48' => 'CURLE_UNKNOWN_TELNET_OPTION (48) – 无法识别以 CURLOPT_TELNETOPTIONS 设置的选项。 请参阅相关文档。',
- '49' => 'CURLE_TELNET_OPTION_SYNTAX (49) – telnet 选项字符串的格式不正确。',
- '51' => 'CURLE_PEER_FAILED_VERIFICATION (51) – 远程服务器的 SSL 证书或 SSH md5 指纹不正确。',
- '52' => 'CURLE_GOT_NOTHING (52) – 服务器未返回任何数据,在相应情况下,未返回任何数据就属于出现错误。',
- '53' => 'CURLE_SSL_ENGINE_NOTFOUND (53) – 找不到指定的加密引擎。',
- '54' => 'CURLE_SSL_ENGINE_SETFAILED (54) – 无法将选定的 SSL 加密引擎设为默认选项。',
- '55' => 'CURLE_SEND_ERROR (55) – 无法发送网络数据。',
- '56' => 'CURLE_RECV_ERROR (56) – 接收网络数据失败。',
- '58' => 'CURLE_SSL_CERTPROBLEM (58) – 本地客户端证书有问题',
- '59' => 'CURLE_SSL_CIPHER (59) – 无法使用指定的密钥',
- '60' => 'CURLE_SSL_CACERT (60) – 无法使用已知的 CA 证书验证对等证书',
- '61' => 'CURLE_BAD_CONTENT_ENCODING (61) – 无法识别传输编码',
- '62' => 'CURLE_LDAP_INVALID_URL (62) – LDAP 网址无效',
- '63' => 'CURLE_FILESIZE_EXCEEDED (63) – 超过了文件大小上限',
- '64' => 'CURLE_USE_SSL_FAILED (64) – 请求的 FTP SSL 级别失败',
- '65' => 'CURLE_SEND_FAIL_REWIND (65) – 进行发送操作时,curl 必须回转数据以便重新传输,但回转操作未能成功',
- '66' => 'CURLE_SSL_ENGINE_INITFAILED (66) – SSL 引擎初始化失败',
- '67' => 'CURLE_LOGIN_DENIED (67) – 远程服务器拒绝 curl 登录(7.13.1 新增功能)',
- '68' => 'CURLE_TFTP_NOTFOUND (68) – 在 TFTP 服务器上找不到文件',
- '69' => 'CURLE_TFTP_PERM (69) – 在 TFTP 服务器上遇到权限问题',
- '70' => 'CURLE_REMOTE_DISK_FULL (70) – 服务器磁盘空间不足',
- '71' => 'CURLE_TFTP_ILLEGAL (71) – TFTP 操作非法',
- '72' => 'CURLE_TFTP_UNKNOWNID (72) – TFTP 传输 ID 未知',
- '73' => 'CURLE_REMOTE_FILE_EXISTS (73) – 文件已存在,无法覆盖',
- '74' => 'CURLE_TFTP_NOSUCHUSER (74) – 运行正常的 TFTP 服务器不会返回此错误',
- '75' => 'CURLE_CONV_FAILED (75) – 字符转换失败',
- '76' => 'CURLE_CONV_REQD (76) – 调用方必须注册转换回调',
- '77' => 'CURLE_SSL_CACERT_BADFILE (77) – 读取 SSL CA 证书时遇到问题(可能是路径错误或访问权限问题)',
- '78' => 'CURLE_REMOTE_FILE_NOT_FOUND (78) – 网址中引用的资源不存在',
- '79' => 'CURLE_SSH (79) – SSH 会话中发生无法识别的错误',
- '80' => 'CURLE_SSL_SHUTDOWN_FAILED (80) – 无法终止 SSL 连接',
- '81' => 'CURLE_AGAIN---Socket是没有准备好发送/接收等待,直到它准备好了,然后再试一次。',
- '82' => 'CURLE_SSL_CRL_BADFILE---无法加载CRL文件(在7.19.0版加入)',
- '83' => 'CURLE_SSL_ISSUER_ERROR---发行人检查失败(在7.19.0版加入)',
- '84' => 'CURLE_FTP_PRET_FAILED---FTP服务器不理解的PRET命令,所有不支持给定的参数。要小心时usingCURLOPT_CUSTOMREQUEST,自定义列表“命令将发送PRET CMD前PASV以及。',
- '85' => 'CURLE_RTSP_CSEQ_ERROR---RTSP的Cseq号码不匹配。',
- '86' => 'CURLE_RTSP_SESSION_ERROR---RTSP会话标识符不匹配。',
- '87' => 'CURLE_FTP_BAD_FILE_LIST--无法,解析FTP文件列表(在FTP通配符下载)。',
- '88' => 'CURLE_CHUNK_FAILED--块回调报告错误。',
- );
- if (isset($error_codes[$no])) {
- return $error_codes[$no];
- } else {
- return '通信异常=>' . $no;
- }
- }
- function oshandle_mkdirs($path)
- {
- if (!is_dir($path)) {
- oshandle_mkdirs(dirname($path));
- if (!empty($path)) {
- mkdir($path);
- }
- }
- return is_dir($path);
- }
- class global_process2lock
- {
- public static $flockSet = array();
- public static function lock($fp)
- {
- if (empty($fp)) {
- throw new Exception("锁文件参数为空!");
- }
- if (!file_exists($fp)) {
- throw new Exception("锁文件路径【" . $fp . "】不存在!");
- }
- global_process2lock::$flockSet[$fp] = fopen($fp, 'r');
- if (empty(global_process2lock::$flockSet[$fp])) {
- throw new Exception(" global_process2lock 未能打开文件 fp=>" . $fp);
- }
- $flockflag = flock(global_process2lock::$flockSet[$fp], LOCK_EX);
- if (empty($flockflag)) {
- throw new Exception(" global_process2lock flock没有能够加上LOCK_EX独占阻塞锁 fp=>" . $fp);
- }
- return $flockflag;
- }
- public static function unlock($fp)
- {
- try {
- if (empty(global_process2lock::$flockSet[$fp])) {
- throw new Exception(" global_process2lock flock解锁LOCK_UN未成功 fp为空");
- }
- $resultA = flock(global_process2lock::$flockSet[$fp], LOCK_UN);
- if (empty($resultA)) {
- throw new Exception(" global_process2lock flock解锁LOCK_UN未成功 fp=>" . $fp);
- }
- $resultB = fclose(global_process2lock::$flockSet[$fp]);
- if (empty($resultB)) {
- throw new Exception(" global_process2lock fclose释放文件锁未成功 fp=>" . $fp);
- }
- } catch (Throwable $ex) {
- if (true) {
- eeglobal_log_handler("global_process2lock", 'ERROR', " global_process2lock fp=>" . $fp . " 释放锁时异常=>" . $ex->getMessage());
- }
- }
- }
- }
- function filelock_handle($lockCatalog, $lockId, $handleArgs, $bizHandle)
- {
- $logCatalog = "filelock_handle";
- eeglobal_log_handler($logCatalog, "debug", "enter lockCatalog=$lockCatalog lockId=$lockId");
- if (empty($lockCatalog)) {
- throw new GeneralException("", "lockCatalog文件锁类别不能为空!");
- }
- $lockId = intval($lockId);
- if ($lockId == 0) {
- $lockId = "all";
- }
- //为空则为此业务类别的全局锁,非记录锁
- $FLCK_PHY_ROOT = WEB_PHY_FILEROOT . "/FILELOCK_ROOT";
- $lockFile = $FLCK_PHY_ROOT . "/$lockCatalog/FL_$lockId.flk";
- $destPhyPath = dirname($lockFile);
- try {
- if (!is_dir($destPhyPath)) {
- if (!mkdir($destPhyPath, 0777, true)) {
- throw new Exception("锁相关目录时发生错误!");
- }
- chmod($destPhyPath, 0777);
- }
- if (!file_exists($lockFile)) {
- if (!fopen($lockFile, "w")) {
- throw new Exception("创建lockId文件锁文件失败!");
- }
- }
- } catch (Throwable $e) {
- throw new GeneralException("", "创建lockId文件锁相关目录及文件时发生错误!" . $e->getMessage());
- }
- try {
- eeglobal_log_handler($logCatalog, "debug", "lockbefore lockCatalog=$lockCatalog lockId=$lockId");
- global_process2lock::lock($lockFile);
- eeglobal_log_handler($logCatalog, "debug", "lockafter lockCatalog=$lockCatalog lockId=$lockId");
- return $bizHandle($handleArgs);
- } catch (Throwable $ex) {
- throw $ex;
- } finally {
- eeglobal_log_handler($logCatalog, "debug", "unlockbefore lockCatalog=$lockCatalog lockId=$lockId");
- global_process2lock::unlock($lockFile);
- eeglobal_log_handler($logCatalog, "debug", "unlockafter lockCatalog=$lockCatalog lockId=$lockId");
- }
- }
- function basecfg_getKey($subSystem, $groupKey)
- {
- if (empty($groupKey)) {
- throw new GeneralException("", "groupKey不能为空");
- }
- if (empty(trim($subSystem))) {
- $subSystem = "GC";
- }
- $groupKeyALL = trim($subSystem . "_" . $groupKey);
- if (empty($groupKeyALL)) {
- throw new GeneralException("", "groupKeyALL不能为空");
- }
- $groupKeyCache = "GGCONFIG_$groupKeyALL";
- return array(
- "groupKeyALL" => $groupKeyALL,
- "groupKeyCache" => $groupKeyCache,
- );
- }
- function basecfg_getConfig($subSystem, $groupKey)
- {
- $keyInfo = basecfg_getKey($subSystem, $groupKey);
- $groupKeyALL = $keyInfo["groupKeyALL"];
- $groupKeyCache = $keyInfo["groupKeyCache"];
- if (!empty($GLOBALS[$groupKeyCache])) {
- return $GLOBALS[$groupKeyCache];
- }
- $system_config_cache = pdo_fetch("select * from base_config where `group`=:group and `name`='system_config_cache'", array(':group' => $groupKeyALL));
- if (empty($system_config_cache['value'])) {
- $config = array();
- $configdata = pdo_fetchall("select * from base_config where `group`=:group", array(':group' => $groupKeyALL));
- foreach ($configdata as $item) {
- $cvalue = $item['value'];
- if (mb_strpos($item['value'], "YPWYPWARRAY") !== false) {
- $cvalue = mb_ereg_replace("YPWYPWARRAY", "", $item['value']);
- $cvalue = json_decode($cvalue, true);
- }
- $config[$item['name']] = $cvalue;
- }
- if (!empty($system_config_cache['name'])) {
- pdo_update('base_config', array('value' => serialize($config)), array('name' => 'system_config_cache', 'group' => $groupKeyALL));
- } else {
- pdo_insert('base_config', array('name' => 'system_config_cache', 'value' => serialize($config), 'group' => $groupKeyALL));
- }
- $GLOBALS[$groupKeyCache] = $config;
- return $GLOBALS[$groupKeyCache];
- } else {
- $GLOBALS[$groupKeyCache] = unserialize($system_config_cache['value']);
- return $GLOBALS[$groupKeyCache];
- }
- }
- function basecfg_setConfig($subSystem, $groupKey, $arrays, $needClear = false)
- {
- $keyInfo = basecfg_getKey($subSystem, $groupKey);
- $groupKeyALL = $keyInfo["groupKeyALL"];
- $groupKeyCache = $keyInfo["groupKeyCache"];
- if (empty($arrays) || !is_array($arrays) || count($arrays) <= 0) {
- throw new GeneralException("", "basecfg_setConfig的参数arrays不能为空");
- }
- $sqlTemp = "";
- $sqlParam = array();
- $sqlParam[":group"] = $groupKeyALL;
- if ($needClear == true) {
- $sqlTemp .= " delete from base_config where `group`=:group; ";
- }
- $index = 0;
- foreach ($arrays as $cname => $cvalue) {
- $index++;
- $cnamePN = ":P{$index}_cname";
- $cvaluePN = ":P{$index}_cvalue";
- $sqlParam[$cnamePN] = $cname;
- $sqlParam[$cvaluePN] = (!is_array($cvalue) ? $cvalue : "YPWYPWARRAY" . json_encode($cvalue));
- $sqlTemp .= " set @handle_id='0'; "; //根据条件查询是否存在对应记录limit 1
- $sqlTemp .= " select @handle_id:=`name` from base_config where `group`=:group and `name`=$cnamePN limit 1;";
- //基于查询结果作为条件的dual虚表进行关联插入
- $sqlTemp .= " insert into base_config ( `group`,`name`,`value` )";
- $sqlTemp .= " select :group,$cnamePN,$cvaluePN from dual where ifnull(@handle_id,'0')='0' ;";
- //候补更新,可能为空更新
- $sqlTemp .= " update base_config SET `value`=$cvaluePN where ifnull(@handle_id,'0')<>'0' and `group`=:group and `name`=$cnamePN;";
- }
- $sqlTemp .= " update base_config SET `value`='' where `group`=:group and `name`='system_config_cache'; ";
- pdo_query3($sqlTemp, $sqlParam);
- unset($GLOBALS[$groupKeyCache]); //清理同一进程内可共享缓存
- }
- /**序列化相关**/
- function base_iserializer($value)
- {
- return serialize($value);
- }
- function base_iunserializer($value)
- {
- if (empty($value)) {
- return '';
- }
- if (!base_isserialized($value)) {
- return $value;
- }
- $result = unserialize($value);
- if ($result === false) {
- $temp = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $value);
- return unserialize($temp);
- }
- return $result;
- }
- function base_isserialized($data, $strict = true)
- {
- if (!is_string($data)) {
- return false;
- }
- $data = trim($data);
- if ('N;' == $data) {
- return true;
- }
- if (strlen($data) < 4) {
- return false;
- }
- if (':' !== $data[1]) {
- return false;
- }
- if ($strict) {
- $lastc = substr($data, -1);
- if (';' !== $lastc && '}' !== $lastc) {
- return false;
- }
- } else {
- $semicolon = strpos($data, ';');
- $brace = strpos($data, '}');
- if (false === $semicolon && false === $brace) {
- return false;
- }
- if (false !== $semicolon && $semicolon < 3) {
- return false;
- }
- if (false !== $brace && $brace < 4) {
- return false;
- }
- }
- $token = $data[0];
- switch ($token) {
- case 's':
- if ($strict) {
- if ('"' !== substr($data, -2, 1)) {
- return false;
- }
- } elseif (false === strpos($data, '"')) {
- return false;
- }
- case 'a':
- case 'O':
- return (bool) preg_match("/^{$token}:[0-9]+:/s", $data);
- case 'b':
- case 'i':
- case 'd':
- $end = $strict ? '$' : '';
- return (bool) preg_match("/^{$token}:[0-9.E-]+;$end/", $data);
- }
- return false;
- }
- function imghandle_buildAllUrl($oldUrl)
- {
- if (empty($oldUrl)) {
- return '';
- }
- $newUrl = $oldUrl;
- if (mb_strpos(strtolower($oldUrl), "http") !== 0) {
- $newUrl = WEBSITE_ROOT . $oldUrl;
- }
- return $newUrl;
- }
- function imghandle_createImage($imgurl)
- {
- $resp = http_get(imghandle_buildAllUrl($imgurl));
- return imagecreatefromstring($resp);
- }
- function imghandle_mergeImage($target, $data, $imgurl)
- {
- $img = imghandle_createImage($imgurl);
- $w = imagesx($img);
- $h = imagesy($img);
- if (intval($data['width']) <= 0) {
- $data['width'] = $w;
- }
- if (intval($data['height']) <= 0) {
- $data['height'] = $w;
- }
- imagecopyresized($target, $img, $data['left'], $data['top'], 0, 0, $data['width'], $data['height'], $w, $h);
- imagedestroy($img);
- return $target;
- }
- function imghandle_mergeText($target, $data, $text, $fontFileName)
- {
- $font = WEB_PHY_ASSETROOT . "/font/$fontFileName.ttf";
- if (!file_exists($font)) {
- $font = WEB_PHY_ASSETROOT . "/font/msyh.ttf";
- }
- if (intval($data['size']) <= 0) {
- $data['size'] = 12;
- }
- $colors = imghandle_hex2rgb($data['color']);
- if (empty($colors)) {
- $colors = array('red' => 0, 'green' => 0, 'blue' => 0);
- }
- $color = imagecolorallocate($target, $colors['red'], $colors['green'], $colors['blue']);
- if (intval($data['width']) <= 0) {
- $data['width'] = 50;
- }
- mb_internal_encoding("UTF-8"); //设置编码
- $content = "";
- // 将字符串拆分成一个个单字 保存到数组 letter 中
- for ($i = 0; $i < mb_strlen($text); $i++) {
- $letter[] = mb_substr($text, $i, 1);
- }
- foreach ($letter as $l) {
- $teststr = $content . " " . $l;
- $fontBox = imagettfbbox($data['size'], 0, $font, $teststr);
- // 判断拼接后的字符串是否超过预设的宽度
- if (($fontBox[2] > intval($data['width'])) && ($content !== "")) {
- $content .= "\n";
- }
- $content .= $l;
- }
- imagettftext($target, $data['size'], 0, $data['left'], $data['top'] + $data['size'], $color, $font, $content);
- return $target;
- }
- function imghandle_hex2rgb($colour)
- {
- if ($colour[0] == '#') {
- $colour = substr($colour, 1);
- }
- if (strlen($colour) == 6) {
- list($r, $g, $b) = array(
- $colour[0] . $colour[1],
- $colour[2] . $colour[3],
- $colour[4] . $colour[5],
- );
- } elseif (strlen($colour) == 3) {
- list($r, $g, $b) = array(
- $colour[0] . $colour[0],
- $colour[1] . $colour[1],
- $colour[2] . $colour[2],
- );
- } else {
- return false;
- }
- $r = hexdec($r);
- $g = hexdec($g);
- $b = hexdec($b);
- return array(
- 'red' => $r,
- 'green' => $g,
- 'blue' => $b,
- );
- }
- function poster_build_pre($bizCatalog, $bizid, $userid, $poster, $saveSubPath, $cbQR, $cbQrMina)
- {
- $bizCatalog = intval($bizCatalog);
- $bizid = intval($bizid);
- $userid = intval($userid);
- foreach ($poster["data"] as &$d) {
- if ($d['type'] == 'qr') {
- $qr_imgtype = $d["imgtype"] == "png" ? "png" : "jpeg";
- $qr_md5 = md5(json_encode($d));
- $qr_fileName = "{$bizCatalog}_{$bizid}_{$userid}_$qr_md5.{$qr_imgtype}";
- $bizData = $cbQR($bizCatalog, $bizid, $userid, $d);
- $qrEmbedData = $bizData["qrEmbedData"];
- $qrSubPath = $bizData["qrSubPath"];
- $qr_pathPath = "$qrSubPath/$qr_fileName";
- $qr_urlPath = WEB_URL_FILEROOT . "/$qr_pathPath";
- $qr_phyPath = WEB_PHY_FILEROOT . "/$qr_pathPath";
- $destPhyPath = dirname($qr_phyPath);
- if (!is_dir($destPhyPath)) {
- oshandle_mkdirs($destPhyPath);
- }
- if (!file_exists($qr_phyPath)) {
- require_once WEB_PHY_ROOT . "/base/lib_qr.php";
- $d['margin'] = intval(str_replace('px', '', $d['margin']));
- $d['size'] = intval(str_replace('px', '', $d['size']));
- lib_qrbuild_core($qr_imgtype, $qrEmbedData, $qr_phyPath, $d['size'], $d['margin']
- , null, null, null, null, $d["logpath"]);
- }
- $d['src'] = $qr_urlPath;
- $d['type'] = "img";
- } else if ($d['type'] == 'qrmina') {
- $qrmina_imgtype = $d["imgtype"] == "png" ? "png" : "jpeg";
- $qrmina_md5 = md5(json_encode($d));
- $qrmina_fileName = "{$bizCatalog}_{$bizid}_{$userid}_$qrmina_md5.{$qrmina_imgtype}";
- $bizData = $cbQrMina($bizCatalog, $bizid, $userid, $d);
- $qrminaSubPath = $bizData["qrminaSubPath"];
- $qrminaAppId = $bizData["qrminaAppId"];
- $qrminaAppSecret = $bizData["qrminaAppSecret"];
- $qrminaPagePath = $bizData["qrminaPagePath"];
- $qrmina_pathPath = "$qrminaSubPath/$qrmina_fileName";
- $qrmina_urlPath = WEB_URL_FILEROOT . "/$qrmina_pathPath";
- $qrmina_phyPath = WEB_PHY_FILEROOT . "/$qrmina_pathPath";
- $destPhyPath = dirname($qrmina_phyPath);
- if (!is_dir($destPhyPath)) {
- oshandle_mkdirs($destPhyPath);
- }
- if (!file_exists($qrmina_phyPath)) {
- require_once WEB_PHY_ROOT . "/base/wxsrv.php";
- $d['size'] = intval(str_replace('px', '', $d['size']));
- weixin_getMinaQCode($qrminaAppId, $qrminaAppSecret, $qrmina_phyPath,
- $bizCatalog, $bizid, $userid, $qrminaPagePath, $d['size']);
- }
- $d['src'] = $qrmina_urlPath;
- $d['type'] = "img";
- }
- }
- $poster_md5 = md5(json_encode(array(
- 'version' => 1,
- 'catalog' => $bizCatalog,
- 'bizid' => $bizid,
- 'userid' => $userid,
- 'width' => $poster["width"],
- 'height' => $poster["height"],
- 'bg' => $poster["bg"],
- 'data' => $poster["data"],
- 'imgtype' => $poster["imgtype"],
- )));
- $poster_fileName = "{$bizCatalog}_{$bizid}_{$userid}_$poster_md5.{$poster["imgtype"]}";
- $poster_pathPath = "$saveSubPath/$poster_fileName";
- $poster_phyPath = WEB_PHY_FILEROOT . "/$poster_pathPath";
- $destPhyPath = dirname($poster_phyPath);
- if (!is_dir($destPhyPath)) {
- oshandle_mkdirs($destPhyPath);
- }
- if (!file_exists($poster_phyPath)) {
- poster_build($poster["width"], $poster["height"], $poster["bg"], $poster["data"], $poster_phyPath, $poster["imgtype"]);
- }
- return WEB_URL_FILEROOT . "/$poster_pathPath";
- }
- function poster_build($width, $height, $bgPicPath, $data, $savePath, $saveType = "jpg")
- {
- set_time_limit(0);
- @ini_set('memory_limit', '256M');
- $width = intval($width);
- if ($width < 10) {
- $width = 10;
- }
- if ($width > 1240) {
- $width = 1240;
- }
- $height = intval($height);
- if ($height < 10) {
- $height = 10;
- }
- if ($height > 1624) {
- $height = 1624;
- }
- $target = imagecreatetruecolor($width, $height);
- if (!empty($bgPicPath)) {
- $bg = imghandle_createImage($bgPicPath);
- imagecopy($target, $bg, 0, 0, 0, 0, $width, $height);
- imagedestroy($bg);
- }
- foreach ($data as $d) {
- $d['left'] = intval(str_replace('px', '', $d['left']));
- $d['top'] = intval(str_replace('px', '', $d['top']));
- $d['width'] = intval(str_replace('px', '', $d['width']));
- $d['height'] = intval(str_replace('px', '', $d['height']));
- $d['size'] = intval(str_replace('px', '', $d['size']));
- $d['src'] = imghandle_buildAllUrl($d['src']);
- if ($d['type'] == 'img') {
- $target = imghandle_mergeImage($target, $d, $d['src']);
- } else if ($d['type'] == 'text') {
- if ($d['width'] <= 0) {
- $d['width'] = $width;
- }
- $target = imghandle_mergeText($target, $d, $d['text'], $d['font']);
- }
- }
- $saveType == "jpg" ? imagejpeg($target, $savePath) : imagepng($target, $savePath);
- imagedestroy($target);
- }
- function base_putForendErrLog($forendtype)
- {
- $GPC = input_param_handle(false);
- $ajaxdata = input_getPostObj();
- $forendid = isset($ajaxdata["forendid"]) ? $ajaxdata["forendid"] : $GPC["forendid"];
- if (empty(trim($forendid))) {
- $forendid = "无";
- }
- $catalog = isset($ajaxdata["catalog"]) ? $ajaxdata["catalog"] : $GPC["catalog"];
- if (empty(trim($catalog))) {
- $catalog = "无";
- }
- $content = isset($ajaxdata["content"]) ? $ajaxdata["content"] : $GPC["content"];
- if (empty(trim($content))) {
- $content = "没有传递content,内容为空";
- }
- pdo_insert("base_forend_errlog", array(
- "createtime" => time(),
- "forendtype" => $forendtype,
- "forendid" => $forendid,
- "errcatalog" => $catalog,
- "errcontent" => $content,
- ));
- }
- function base_buildForendToken($userInfo)
- {
- $stoptime = time() + 3600 * 24 * 15;
- $userInfo["salt"] = random(8);
- pdo_query("update base_user set salt=:salt where id=:id;", array(
- ":salt" => $userInfo["salt"], ":id" => $userInfo["id"],
- ));
- switch (FOREND_TOKEN_MODE) {
- default:
- $nowsign = base_getforendTokenSign($userInfo, $stoptime);
- return FOREND_TOKEN_MODE . "_$stoptime$nowsign";
- break;
- }
- }
- function base_getforendTokenSign($userInfo, $stoptime)
- {
- return md5(trim($stoptime) . "_" . trim($userInfo["id"]) . "_" . trim($userInfo["createtime"]) . "_" . trim($userInfo["salt"]));
- }
- function base_verifyForendToken($userInfo)
- {
- $GPC = input_param_handle(false);
- $ajaxdata = input_getPostObj();
- $token = isset($ajaxdata[FOREND_TOKEN_NAME]) ? $ajaxdata[FOREND_TOKEN_NAME] : $GPC[FOREND_TOKEN_NAME];
- if (empty(trim($token))) {
- throw new GeneralException("", "没有传递前端会话Token的参数[ " . FOREND_TOKEN_NAME . " ]或参数为空!");
- }
- $token = mb_ereg_replace("_", "", $token);
- switch (intval($token[0])) { //0-md5/sha1; 1-对称加密; 2-非对称加密
- default:
- $stoptime = mb_substr($token, 1, 10);
- if (time() > intval($stoptime)) {
- base_verifyForendTokenFail("会话令牌已过期,请重新登录验证以获取新令牌!");
- }
- $oldsign = mb_substr($token, 11);
- $nowsign = base_getforendTokenSign($userInfo, $stoptime);
- if ($oldsign != $nowsign) {
- base_verifyForendTokenFail("会话令牌不匹配,请重新登录验证以获取新令牌!");
- }
- break;
- }
- return true;
- }
- function base_verifyForendTokenFail($attachMsg = "会话令牌无效,请重新登录验证以获取新令牌!")
- {
- $ajaxRes = new AjaxResult;
- $ajaxRes->ErrMsg = FOREND_TOKEN_ERRMSGFLAG . $attachMsg;
- ob_clean();
- ob_start();
- header('Content-Type:application/json;charset=UTF-8');
- echo @json_encode($ajaxRes);
- exit;
- }
- function base_loginByPhone($subSystem)
- {
- $GPC = input_param_handle(false);
- $ajaxdata = input_getPostObj();
- $phone = isset($ajaxdata["phone"]) ? $ajaxdata["phone"] : $GPC["phone"];
- if (empty($phone)) {
- throw new GeneralException("", "没有传递必要的phone参数");
- }
- if (!preg_match("/^1\d{10,10}$/", trim($phone))) {
- throw new GeneralException("", "传递的不是正确的手机号");
- }
- $code = isset($ajaxdata["code"]) ? $ajaxdata["code"] : $GPC["code"];
- if ($phone == "18920787806" && (intval($subSystem) == 1)) {
- $code = "123456";
- }
- //会员侧测试锁码,用于测试及第三方验证
- if ($phone == "13920062668" && (intval($subSystem) == 2)) {
- $code = "687206";
- }
- //商家侧测试锁码,用于测试及第三方验证
- if (empty(trim($code))) {
- $code = rand(123456, 654321);
- /***UPSERT手机用户记录**start***/
- $sqlTemp = "";
- $sqlParam = array();
- $sqlParam[":nowtime"] = time();
- $sqlParam[":subsystem"] = intval($subSystem);
- $sqlParam[":mobile"] = trim($phone);
- $sqlParam[":smscode"] = $code;
- $sqlParam[":salt"] = random(8);
- $sqlTemp .= " set @handle_id='0'; ";
- $sqlTemp .= " select @handle_id:=`mobile` from base_user where subsystem=:subsystem and `mobile`=:mobile limit 1;";
- $sqlTemp .= " insert into base_user ( `createtime`,`subsystem`,`mobile`,`smscode`,`salt` )";
- $sqlTemp .= " select :nowtime ,:subsystem ,:mobile ,:smscode ,:salt from dual where ifnull(@handle_id,'0')='0' ;";
- $sqlTemp .= " update base_user SET `updatetime`=:nowtime,`smscode`=:smscode where ifnull(@handle_id,'0')<>'0' and subsystem=:subsystem and `mobile`=:mobile;";
- pdo_query3($sqlTemp, $sqlParam);
- /***UPSERT手机用户记录**finish***/
- include_once WEB_PHY_ROOT . "/base/smslib.php"; //发短信阿里
- $sended = alisms_sendSms($phone, AliSMS_CODE_TMPCODE, AliSMS_CODE_TMPSIGN, array("code" => $code));
- return true;
- } else {
- $baseUser = pdo_fetch("select * from base_user where subsystem=:subsystem and `mobile`=:mobile limit 1;", array(
- ":subsystem" => intval($subSystem),
- ":mobile" => trim($phone),
- ));
- if (empty($baseUser)) {
- throw new GeneralException("", "没有定位到此手机号的用户记录,请先不带code参数方式调用此接口先获取验证码并预构建手机用户记录!");
- }
- if (trim($baseUser["smscode"]) != trim($code)) {
- throw new GeneralException("", "输入的短信验证码不正确,或者已过期!");
- } else { //生成并返给前端会话token
- $baseUser["FOREND_TOKEN"] = base_buildForendToken($baseUser);
- return $baseUser;
- }
- }
- }
- function basebaidumap_fetchplace($lat, $lng, $coordtype = "wgs84ll")
- {
- $url = "https://api.map.baidu.com/reverse_geocoding/v3/?";
- $url .= "ak=" . BaiduLBS_APPKEY;
- $url .= "&output=json&coordtype={$coordtype}";
- $url .= "&location={$lat},{$lng}";
- $result = http_get($url);
- $obj = @json_decode($result, true);
- if (!empty($obj) && intval($obj["status"]) == 0
- && is_array($obj["result"]) && !empty($obj["result"]["formatted_address"])) {
- return $obj["result"];
- } else {
- throw new Exception($result);
- }
- }
- //-----------------------------------------------------
- use AlibabaCloud\SDK\Dyplsapi\V20170525\Dyplsapi;
- use Darabonba\OpenApi\Models\Config;
- use AlibabaCloud\SDK\Dyplsapi\V20170525\Models\CreateSubscriptionRequest;
- use AlibabaCloud\SDK\Dyplsapi\V20170525\Models\BindAxnRequest;
- function alivphone_BindAxn($expiration, $phoneNoA, $poolKey)
- {
- require_once WEB_PHY_ROOT . "/base/composer/vendor/autoload.php";
- try {
- $config = new Config([
- "accessKeyId" => AliSMSAccessKey,
- "accessKeySecret" => AliSMSAccessSecret,
- ]);
- $config->endpoint = "dyplsapi.aliyuncs.com";
- $client = new Dyplsapi($config);
- $bindAxnRequest = new BindAxnRequest([
- "poolKey" => $poolKey,
- "phoneNoA" => $phoneNoA,
- "expiration" => date("Y-m-d H:i:s", $expiration),
- ]);
- eeglobal_log_handler('alivphone_BindAxn', 'info', "bindAxnRequest=>" . json_encode($bindAxnRequest));
- $response = $client->bindAxn($bindAxnRequest);
- if ($response->body->code == "OK") {
- eeglobal_log_handler('alivphone_BindAxn', 'info', "bindok=>" . json_encode($response->body->secretBindDTO));
- $secretNo = $response->body->secretBindDTO->secretNo;
- $subsId = $response->body->secretBindDTO->subsId;
- return array("secretNo" => $secretNo, "subsId" => $subsId);
- } else {
- throw new GeneralException("AlibabaCloudError", json_encode($response->body));
- }
- } catch (Throwable $ex) {
- throw new GeneralException("AlibabaCloudError", $ex->getMessage());
- }
- }
- use AlibabaCloud\SDK\Dyplsapi\V20170525\Models\QueryCallStatusRequest;
- function alivphone_QueryCallStatus($poolKey, $subsId)
- {
- require_once WEB_PHY_ROOT . "/base/composer/vendor/autoload.php";
- try {
- $config = new Config([
- "accessKeyId" => AliSMSAccessKey,
- "accessKeySecret" => AliSMSAccessSecret,
- ]);
- $config->endpoint = "dyplsapi.aliyuncs.com";
- $client = new Dyplsapi($config);
- $queryCallStatusRequest = new QueryCallStatusRequest([
- "poolKey" => $poolKey,
- "subsId" => $subsId,
- ]);
- eeglobal_log_handler('alivphone_QueryCallStatus', 'info', "queryCallStatusRequest=>" . json_encode($queryCallStatusRequest));
- $response = $client->queryCallStatus($queryCallStatusRequest);
- if ($response->body->code == "OK") {
- eeglobal_log_handler('alivphone_QueryCallStatus', 'info', "queryok=>" . json_encode($response->body->secretCallStatusDTO));
- $calledNo = $response->body->secretCallStatusDTO->calledNo;
- $status = $response->body->secretCallStatusDTO->status;
- return array("calledNo" => $calledNo, "status" => $status);
- } else {
- throw new GeneralException("AlibabaCloudError", json_encode($response->body));
- }
- } catch (Throwable $ex) {
- throw new GeneralException("AlibabaCloudError", $ex->getMessage());
- }
- }
- /**************************************************************/
- function baseexcel_exportCsv($fileName, $title, $args, $handle)
- {
- require_once WEB_PHY_ROOT . "/base/composer/vendor/autoload.php";
- set_time_limit(0);
- $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
- $activeSheet = $spreadsheet->getActiveSheet();
- foreach ($title as $key => $value) {
- $activeSheet->setCellValueByColumnAndRow($key + 1, 1, $value);
- }
- $writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
- $writer->setOutputEncoding("GBK");
- $writer->save('php://output');
- $fp = fopen('php://output', 'w'); //打开output流
- header("Content-Description: File Transfer");
- header("Expires: 0");
- header("Cache-Control: must-revalidate");
- header("Pragma: public");
- header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
- header("Content-Disposition: attachment;filename={$fileName}.csv");
- header("Cache-Control: max-age=0");
- do {
- $backdata = $handle($args);
- if (empty($backdata)) {
- break;
- }
- $pagedata = $backdata["pagedata"];
- if (empty($pagedata)) {
- break;
- }
- $args = $backdata["args"];
- foreach ($pagedata as $item) {
- mb_convert_variables('GBK', 'UTF-8', $item);
- fputcsv($fp, $item);
- }
- ob_flush();
- flush();
- } while (!empty($pagedata));
- fclose($fp);
- exit();
- }
- function base_buildSNById($prefix, $id, $prefixMaxLen = 11, $zeroPadMaxLen = 11)
- {
- $strId = intval($id) . "";
- if ((intval($prefixMaxLen) - mb_strlen($strId)) <= 0) {
- $prefix = "";
- }
- $diff = intval($zeroPadMaxLen) - mb_strlen($strId);
- $strPad = "";
- for ($iii = 0; $diff > 0 && $iii < $diff; $iii++) {
- $strPad .= "0";
- }
- return $prefix . $strPad . $strId;
- }
- function base_fetchIdBySN($sn)
- {
- preg_match_all('/\d/', $sn, $arr);
- $id = implode($arr[0]);
- return intval($id);
- }
|