PHP脚本-任务结果处理
我找不到如何最佳实践解决以下情况的信息 Cron在定义间隔脚本中运行(见下文)。如果一切正常,一切都会发生,一切正常。但是,如果发生错误(在代码注释//VALIDATION…)我不知道是否有错误(我必须在浏览器中手动运行脚本,并通过var_dump、echo、浏览所有日志等进行调试) 我想丰富一个状态,在那里我可以获得Cron作业的最终报告(例如)-基本数据(作业的摘要结果)+发生错误的位置或运行正确的信息(例如文件XXX已被处理,无法删除文件,目录XXX不存在)。此外,如果当程序的一部分继续运行时发生错误(请参阅脚本中的注释) 谢谢你,彼得PHP脚本-任务结果处理,php,exception-handling,scheduled-tasks,Php,Exception Handling,Scheduled Tasks,我找不到如何最佳实践解决以下情况的信息 Cron在定义间隔脚本中运行(见下文)。如果一切正常,一切都会发生,一切正常。但是,如果发生错误(在代码注释//VALIDATION…)我不知道是否有错误(我必须在浏览器中手动运行脚本,并通过var_dump、echo、浏览所有日志等进行调试) 我想丰富一个状态,在那里我可以获得Cron作业的最终报告(例如)-基本数据(作业的摘要结果)+发生错误的位置或运行正确的信息(例如文件XXX已被处理,无法删除文件,目录XXX不存在)。此外,如果当程序的一部分继续运
#region <<< Process all files >>>
// get all eported directories with files
$xpath = new DOMXPath($myDOMDocumentConfiguration);
$searchNodes = $xpath->query('//Configuration/Directory');
// go throw all directories
foreach( $searchNodes as $searchNode )
{
// VALIDATION
// ERROR CAN BE HERE - DIRECTORY NOT EXISTS
// TRY NEXT DIRECTORY
// find all files in defined path (pathnames matching a pattern)
foreach(glob($searchNode->getAttribute('FilePathD')) as $strFile)
{
// convert csv file to array
$arrFiles = Record::ConvertCsv2Array($strFile);
// VALIDATION
// ERROR CAN BE HERE - CANNOCT CONVERT CSV FILE TO ARRAY
// TRY NEXT FILE
// go throw all items
foreach($arrFiles as $FileItem)
{
// prepare SQL query and insert ot to database
$strSqlQuery = 'INSERT INTO ....';
// VALIDATION
// ERROR CAN BE HERE - BAD INSERT TO DATABASE
// IGNORE, APPEND ONLY INFORMATION TO LOG
}
// if file is inserted to database, delete it
unlink($FileItem);
// VALIDATION
// ERROR CAN BE HERE - CAN NOT DELETE FILE
// IGNORE, APPEND ONLY INFORMATION TO LOG
}
// VALIDATION
// ERROR CAN BE HERE - DIRECTORY NOT EXISTS
// TRY NEXT DIRECTORY
// delete all analytics files in defined path (pathnames matching a pattern)
foreach(glob($searchNode->getAttribute('FilePathA')) as $strFile)
{
// cmr files are onyl analytics - delete it
unlink($strFile);
// VALIDATION
// ERROR CAN BE HERE - CAN NOT DELETE FILE
// IGNORE, APPEND ONLY INFORMATION TO LOG
}
}
#endregion
echo '=== Task has been completed ===';
#地区>
//获取包含文件的所有eported目录
$xpath=新的DOMXPath($myDOMDocumentConfiguration);
$searchNodes=$xpath->query('//Configuration/Directory');
//去扔所有目录
foreach($searchNodes作为$searchNode)
{
//验证
//此处可能有错误-目录不存在
//试试下一个目录
//查找定义路径(与模式匹配的路径名)中的所有文件
foreach(glob($searchNode->getAttribute('FilePathD'))作为$strFile)
{
//将csv文件转换为数组
$arrFiles=Record::ConvertCsv2Array($strFile);
//验证
//此处可能有错误-无法将CSV文件转换为数组
//尝试下一个文件
//去扔所有的东西
foreach($arrFiles作为$FileItem)
{
//准备SQL查询并将ot插入数据库
$strSqlQuery='INSERT INTO….';
//验证
//此处可能有错误-数据库插入错误
//忽略,仅将信息附加到日志
}
//若文件已插入到数据库,请将其删除
取消链接($FileItem);
//验证
//此处可能有错误-无法删除文件
//忽略,仅将信息附加到日志
}
//验证
//此处可能有错误-目录不存在
//试试下一个目录
//删除定义路径中的所有分析文件(与模式匹配的路径名)
foreach(glob($searchNode->getAttribute('FilePathA'))作为$strFile)
{
//cmr文件是onyl analytics-删除它
取消链接($strFile);
//验证
//此处可能有错误-无法删除文件
//忽略,仅将信息附加到日志
}
}
#端区
echo'==任务已完成===';
通常的方法非常简单:只需为cron作业编写一个日志文件,并将每个重要细节都记录到其中。即使你的脚本崩溃了,你也能得到所有的输出。谢谢你的回答。我同意日志记录是最基本的,但如果在脚本处理过程中出现问题(例如,目录不存在,最终脚本会抛出异常),这不是终止脚本的原因。特别是在读取值之后从csv文件中,我尝试连接到端口161上的IP地址并读取一些值- 脚本可能会在超时、连接被拒绝等情况下给出错误(抛出Exception)。这是一个“小问题”杀死所有脚本。因此,如果我理解-log并管理程序逻辑,我必须通过几个嵌套的try-catch块来管理。对吗?我从未声称您必须自己终止脚本。无论是通过测试条件还是捕获异常,都不反对处理错误。这是我认为理所当然的事情,应该始终这样做尽可能实现健壮性,因此具有容错性。问题通常是您的脚本在解释器终止时无法处理的意外问题。在这种情况下,日志记录是查找哪些操作成功运行以及问题在何处阻止进一步操作的最佳方法。