我正在使用mongo数据库和PHP将文件元信息与文件目录进行比较,以查看丢失的位置。然后,我们返回一个文件和数据库的关联数组,以查看丢失的内容以及从哪里开始。
注意:您不需要知道mongo就可以帮助我。
例如,如果我从目录中删除文件,但数据库中有一个条目,我的数组将如下所示:
array(2) {
'File System' =>
array(1) {
[0] =>
string(28) "50e72bce045aca4c04000004.txt"
}
'Database' =>
array(0) {
}
}
此检查的代码如下:
public function compareDatabaseToDirectory(){
// Fetch all file meta information
$files = $this->_model->fetchAll(array());
// Create a file based on id and extension.
foreach($files as $id=>$model){
$dataBaseEntries[] = $id . $model->fileExtension;
}
// Get all files in our directory
$directoryFiles = preg_grep('/^([^.])/', scandir($this->getDestination()));
// Get the differneces of files
$differences = array_diff($dataBaseEntries, $directoryFiles);
// Check if missing from database OR missing from file system
$missingFromDataBase = array_diff($differences, $dataBaseEntries);
$missingFromFileSystem = array_diff($differences, $directoryFiles);
// Create an associative array
$filesMissing = array(
'File System' => $missingFromFileSystem,
'Database' => $missingFromDataBase
);
// Return results.
return $filesMissing;
}
这里所有人都在使用mongo id并将其附加到文件扩展名以创建所述文件。
我们将文件数组与文件目录中的数据进行比较并返回差异。
在我的测试中,我们所做的只是:
public function testComapreDatabaseToFileSystemMissingFile(){
$this->resetNoSqlDatabase();
unlink(APPLICATION_PATH . '/data/uploadedFiles/testing/50e72bce045aca4c04000004.txt');
$result = $this->_file->compareDatabaseToDirectory();
$expectedArray = array(
'File System' => array(
'50e72bce045aca4c04000004.txt'
),
'Database' => array(),
);
$this->assertEquals($result, $expectedArray);
}
返回上面我看到的数组。然而,如果我在浏览器中复制相同的概念,我上面看到的数组应该是空的。
有什么想法吗?
答案 0 :(得分:1)
这是文件夹权限问题。我们在将文件夹设置为0777之前创建了该文件夹。