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

时间:2015-01-21 14:35:16

标签: php

我希望使用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;
}

3 个答案:

答案 0 :(得分:2)

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

$temp = file_get_contents('path/to/file.ext');

className::emptyDir($dir);

file_put_contents('path/to/file.ext', $temp);

答案 1 :(得分:1)

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

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');

答案 2 :(得分:0)

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