将文件保存到内存,稍后再写回


Save file to memory and later write back

我希望使用 PHP 读取文件,然后将其写入读取文件时不存在的目录。 我无法先创建目录,如下所述。 我不希望将其保存在临时目录中以防止可能的覆盖。 我是否可以读取文件,将其保存在内存中,然后再写入文件?

为什么我想这样做:我有以下清空目录的方法。 我现在需要这样做,但在清空目录的根目录中保留一个文件。 我知道我可以修改此方法以执行此操作,但我很少需要这样做,并且可能希望使用另一种方法。 相反,在调用此方法之前,我想复制有问题的文件,清空目录,然后将其放回原处。

/**
* Empty directory.  Include subdirectories if $deep is true
*/
public static function emptyDir($dirname,$deep=false)
{
    $dirname=(substr($dirname, -1)=='/')?$dirname:$dirname.'/';
    if(!is_dir($dirname)){return false;}
    // Loop through the folder
    $dir = dir($dirname);
    while (false !== $entry = $dir->read())
    {
        // Skip pointers
        if ($entry == '.' || $entry == '..') {
            continue;
        }
        elseif(is_file($dirname.$entry)) {
            unlink($dirname.$entry);
        }
        elseif($deep && is_dir($dirname.$entry)){
            self::deltree($dirname.$entry);
        }
    }
    // Clean up
    $dir->close();
    return true;
}

如果这一切都是通过相同的请求完成的,那么是的,你可以。只需将文件内容保存到变量中,然后再次写回:

$temp = file_get_contents('path/to/file.ext');
className::emptyDir($dir);
file_put_contents('path/to/file.ext', $temp);

是的,可以做到。只需向类添加一个属性即可。因此,在您的类属性中,将有文件的内容,而对象存在,并且它确实设置了。它也可以是类变量(静态),因此如果您不需要,则无需实例化。

class anything {
    var $fileContent = '';
    public static function emptyDir($dirname,$deep=false) {
        //....
    }
    public function setFileContent($fileOrUrlToRead) {
        $this->fileContent = file_get_contents($fileOrUrlToRead);
    }
    public function saveFile($fileName) {
        file_put_contents($fileName, $this->fileContent);
    }
}
$anything = new anything();
$anything->setFileContent('url_or_path_of_file_to_get');
anything::emptyDir('./media/files/');
$anything->saveFile('./media/files/something.txt');

您可以使用会话保存所需的信息。