0, 'ext_script_msg' => '脚本执行成功', 'data_return' => [], ]; // 获取脚本是否启用 $sql = sprintf( "SELECT status FROM hf_mes_calculation_script WHERE process_code='%s' AND interface_code='%s' AND interface_position='begin' LIMIT 1;", $process_code, $class_str ); $ret = Db::fetch($sql); if(empty($ret)){ $response['ext_script_code'] = 0; $response['ext_script_msg'] = '脚本不存在配置数据,请先在后台配置'; return $response; } if($ret['status'] == 0){ $response['ext_script_code'] = 201; $response['ext_script_msg'] = '脚本的状态禁用中'; return $response; } if (!@fopen($script_path, 'r')) { $response['ext_script_code'] = 201; $response['ext_script_msg'] = '脚本文件不存在'; return $response; } try { // 使用file_get_contents()函数读取文件内容 $scriptContent = file_get_contents($script_path); if (isJson($scriptContent)) { $scriptContent = json_decode($scriptContent, true); if (isset($scriptContent['code']) && $scriptContent['code'] == 404) { throw new Exception('脚本文件不存在'); } } // 检查文件是否成功读取 if ($scriptContent !== false) { @trigger_error('flag', E_USER_NOTICE); // 执行脚本 eval($scriptContent); // 获取 Notice 错误 $error = error_get_last(); if ($error['message'] != 'flag') { $response['data_return'] = $error['message']; } } else { // 如果文件读取失败,输出错误信息 throw new Exception('无法读取脚本内容'); } } catch (ParseError $p) { $response['ext_script_code'] = 201; $response['ext_script_msg'] = '脚本执行失败, 错误:' . $p->getMessage(); } catch (Throwable $e){ $response['ext_script_code'] = 201; $response['ext_script_msg'] = '脚本执行失败, 错误:' . $e->getMessage(); } catch (Exception $exp) { $response['ext_script_code'] = 201; $response['ext_script_msg'] = '脚本执行失败, 错误:' . $exp->getMessage(); } catch (Error $err) { $response['ext_script_code'] = 201; $response['ext_script_msg'] = '脚本执行失败, 错误:' . $err->getMessage(); } return $response; } public function extScriptEnd($data) { // 判断计算脚本的开关是否开启 if(!config('mes.calculation_script_switch')){ return []; } $process_code = $data['process_code']; $class_name_arr = explode('\\', $data['class_name']); $class_arr = preg_split("/(?<=[a-z])(?![a-z])/", $class_name_arr[count($class_name_arr) - 1], -1, PREG_SPLIT_NO_EMPTY); $class_str = strtolower(implode('_', $class_arr)); $script_path = config('mes.calculation_script_url') . "{$process_code}/{$class_str}/end.script"; /** * 注意:如果脚本需要返回数据,那么需要在脚本里面把内容放到$response['data_return']中统一返回 */ $response = [ 'ext_script_code' => 0, 'ext_script_msg' => '脚本执行成功', 'data_return' => [], ]; // 获取脚本是否启用 $sql = sprintf( "SELECT status FROM hf_mes_calculation_script WHERE process_code='%s' AND interface_code='%s' AND interface_position='end' LIMIT 1;", $process_code, $class_str ); $ret = Db::fetch($sql); if(empty($ret)){ $response['ext_script_code'] = 0; $response['ext_script_msg'] = '脚本不存在配置数据,请先在后台配置'; return $response; } if($ret['status'] == 0){ $response['ext_script_code'] = 201; $response['ext_script_msg'] = '脚本的状态禁用中'; return $response; } if (!@fopen($script_path, 'r')) { $response['ext_script_code'] = 201; $response['ext_script_msg'] = '脚本文件不存在'; return $response; } try { // 使用file_get_contents()函数读取文件内容 $scriptContent = file_get_contents($script_path); if (isJson($scriptContent)) { $scriptContent = json_decode($scriptContent, true); if (isset($scriptContent['code']) && $scriptContent['code'] == 404) { throw new Exception('脚本文件不存在'); } } // 检查文件是否成功读取 if ($scriptContent !== false) { @trigger_error('flag', E_USER_NOTICE); // 执行脚本 eval($scriptContent); // 获取 Notice 错误 $error = error_get_last(); if ($error['message'] != 'flag') { $response['data_return'] = $error['message']; } } else { // 如果文件读取失败,输出错误信息 throw new Exception('无法读取脚本内容'); } } catch (ParseError $p) { $response['ext_script_code'] = 201; $response['ext_script_msg'] = '脚本执行失败, 错误:' . $p->getMessage(); } catch (Throwable $e){ $response['ext_script_code'] = 201; $response['ext_script_msg'] = '脚本执行失败, 错误:' . $e->getMessage(); } catch (Exception $exp) { $response['ext_script_code'] = 201; $response['ext_script_msg'] = '脚本执行失败, 错误:' . $exp->getMessage(); } catch (Error $err) { $response['ext_script_code'] = 201; $response['ext_script_msg'] = '脚本执行失败, 错误:' . $err->getMessage(); } return $response; } }