如何创建具有不同名称和不同文件夹的多个文件? PHP

时间:2016-06-07 10:43:01

标签: php

所以,我有一个.txt文件,其中包含我丢失文件的路径。我想写一个小的PHP脚本,它只会创建这些文件并将它们留空。

xxx/yyy/xyxy/a/w/r/obvestilo.pdf
xxx/yyy/xyxy/b/print.pdf
xxx/yyy/xyxy/c/speach.doc

这是我在.txt文件中包含丢失文件的示例。我希望脚本能够创建这些文件以及文件夹(如果它们还不存在),但我不知道从哪里开始。我正在考虑将.txt文件传输到一个数组,然后通过所有数组元素循环创建它们。

5 个答案:

答案 0 :(得分:1)

请试试这个

$fp = fopen('files.txt','r');
while(($buffer = fgets($fp,4096)) !== false) {
    $directory = substr($buffer,0,strrpos($buffer,'/') + 1);
    mkdir($directory, 0755, true);
    touch(trim($buffer));
}

files.txt将以您帖子中的格式提供您的文件。

mkdir($directory, 0755, true);将递归创建所需目录,touch将创建一个空白文件。

答案 1 :(得分:1)

尝试以下内容:

$data = explode("\n", file_get_contents('file_list.txt'));
foreach($data as $filename) {
  if(!file_exists(trim($filename))) {
    file_put_contents(trim($filename), '');
  }
}

这将为列表中尚未存在的每个文件写一个空字符串,因此您将获得空文件。它不会为你创建目录,如果你想这样做,你需要做一些更复杂的事情......

答案 2 :(得分:1)

我假设.txt文件中的路径是绝对路径。如果不是,你将不得不在路径前附加某种ROOT_DIRECTORY常数。

通常,您希望将此功能放在一个类中,该类的唯一责任是创建这些空文件:

class EmptyFileCreater {
    const USE_RECUSRION = true;
    const DEFAULT_ACCESS = 0777;

    public function create($path) {
        $this->ensureDirectoryExists(dirname($path));
        $this->createEmptyFile($path);            
    }

    private function ensureDirectoryExists($directory) {
        if (!is_dir($directory)) {
            mkdir($directory, self::DEFAULT_ACCESS, self::USE_RECUSRION);
        }
    }

    private function createEmptyFile($path) {
        touch($path);
    }
}

现在您可以使用此类生成所有文件。

// Retrieve the .txt file as an array of the lines in the file
$paths = file('path/to/missing_file_paths.txt');

$empty_file_creater = new EmptyFileCreater();
foreach ($paths as $path) {
    $empty_file_creater->create($path);
}

答案 3 :(得分:1)

这对你有用:

<?php 
$lines = file('test.txt'); ///path to your file
foreach ($lines as $line_num => $line) 
{
    $fp = fopen($line,"wb");
    fwrite($fp,'');
    fclose($fp);
}
?>

答案 4 :(得分:-1)

您可以使用此方法创建特定长度的随机名称。

/*
     *
     * Get Random number( 5 digit )
     * @param int: 5
     * @return alphnumeric string: length(5)
     */

    public function getRandomNumber($length, $charset = 'abcdefghijkmnopqrpdctvwxyz3456789') {
        $str = '';
        $count = strlen($charset);
        while ($length--) {
            $str .= $charset[mt_rand(0, $count - 1)];
        }
        return $str;
    }