您提出的建议在表面上听起来是正确的,有一个总体 API,它将执行将文件写入文件系统的基本操作。然而,我认为 PHP 开发人员让我们自己来组合一个满足我们应用程序需求的 API,因为他们确实为我们提供了自己做的基本组件。
下面是File::write
我用于文件写入操作的方法片段:
$fileInfo = new SplFileInfo($fileUri);
if (!is_dir($fileInfo->getPath())) {
// I have some proprietary stuff here but you get the idea
}
$file = new SplFileObject($fileUri, $mode);
if (!$file->flock(LOCK_EX | LOCK_NB)) {
throw new Exception(sprintf('Unable to obtain lock on file: (%s)', $fileUri));
}
elseif (!$file->fwrite($content)) {
throw new Exception(sprintf('Unable to write content to file: (%s)... to (%s)', substr($content,0,25), $fileUri));
}
elseif (!$file->flock(LOCK_UN)) {
throw new Exception(sprintf('Unable to remove lock on file: (%s)', $fileUri));
}
elseif (!@chmod($fileUri, $filePerms)) {
throw new Exception(sprintf('Unable to chmod: (%s) to (%s)', $fileUri, $filePerms));
}
这些只是您可以测试的边缘案例的几个示例,如果您需要测试“驱动器是否已连接”,您可以调用is_writable。因此,您只需将其添加到检查列表中,并以对您的应用程序有意义的消息进行响应。
然后,如果您想记录所述错误,只需将调用代码包装在 try/catch 块中:
try {
File::write($fileUri);
} catch (Exception $e) {
error_log($e->getMessage);
}