我希望使用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;
}
答案 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)
您可以使用会话保存所需信息。