Файл получить содержимое и заменить строку для нескольких файлов - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть несколько файлов альфа. php, бета. php и гамма. php в папке с именем test. Мне нужно получить содержимое этих трех файлов и заменить строку в них другой строкой. Чтобы заменить все в папке, это сработало:

foreach (new DirectoryIterator('./test') as $folder) {
    if ($folder->getExtension() === 'php') {
        $file = file_get_contents($folder->getPathname());
        if(strpos($file, "Hello You") !== false){
            echo "Already Replaced";
        }
        else {
            $str=str_replace("Go Away", "Hello You",$file);
            file_put_contents($folder->getPathname(), $str); 
            echo "done";
        }
    }
}

Но я не хочу обрабатывать все файлы в папке. Я просто хочу получить 3 файла: альфа. php, бета. php и гамма. php и обработать их.

Есть ли способ, которым я могу это сделать, или мне нужно просто получать файлы по отдельности и обрабатывать их по отдельности? Спасибо.

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Если это предопределенные файлы, то вам не нужен DirectoryIterator, просто замените содержимое либо на 3 строки, либо на al oop

<?php
$files = ['alpha.php', 'beta.php', 'gamma.php'];

foreach ($files as $file) 
    file_put_contents('./test/'.$file, str_replace("Go Away", "Hello You", file_get_contents('./test/'.$file)));
1 голос
/ 15 апреля 2020

Просто foreach что вы хотите:

foreach (['alpha.php', 'beta.php', 'gamma.php'] as $filename) {
    $file = file_get_contents("./test/$filename");

    if(strpos($file, "Hello You") !== false){
        echo "Already Replaced";
    }
    else {
        $str = str_replace("Go Away", "Hello You", $file);
        file_put_contents("./test/$filename", $str); 
        echo "done";
    }
}

Вам не нужны if, если вам действительно не нужны echo s, чтобы увидеть, когда есть замены:

foreach (['alpha.php', 'beta.php', 'gamma.php'] as $filename) {
    $file = file_get_contents("./test/$filename");
    $str = str_replace("Go Away", "Hello You", $file);
    file_put_contents("./test/$filename", $str); 
}

Или вы можете получить количество замен:

    $str = str_replace("Go Away", "Hello You", $file, $count);
    if($count) {        
        file_put_contents("./test/$filename", $str); 
    }

На Linux вы также можете попробовать exec или что-то с replace или repl поскольку они принимают несколько файлов.

...