PHP以递归方式搜索文件并在每个

时间:2017-04-30 16:17:34

标签: php arrays recursion

我正在尝试创建一个PHP脚本,该脚本应该通过名称递归搜索文件系统中的所有文件,返回结果并在每个选定文件中添加1行。

这是我现在拥有的: 1.寻找文件的部分,工作正常:

    $search = "test.txt";

    $dir_iterator = new RecursiveDirectoryIterator("../");
    $iterator = new RecursiveIteratorIterator($dir_iterator, 
    RecursiveIteratorIterator::SELF_FIRST);

    foreach ($iterator as $file) {
        if($file->getFilename() == $search){
            echo "<input type=\"checkbox\" name=\"optim[]\" value=\"$file\">\n".$file."<br>";
        }
    }
    ?>
    <input type="submit" value="Add to selected">
    </fieldset>
    </form>

此部分适用并返回带有复选框的表单。 这是一个应该创建备份并添加一行到选定的部分的部分:

    $newfile = "text.txt$date";
    $date = date('m-d-Y-H:i:s');
    $target = "Yesterday was rainy";
    $newline = "But today the sun is shining";

    function update() { 
        foreach( $_POST as $fin ) {
            if (!copy($fin, $newfile)) { 
            echo "failed to copy"; 
        }

        $stats = file($fin, FILE_IGNORE_NEW_LINES);   
        $offset = array_search($target,$stats) +1;
        array_splice($stats, $offset, 0, $newline);   
        file_put_contents($fin, join("\n", $stats));   

        if($newline) {
            echo "All file updated";
        } else {
            echo "Sorry, I was unable to add :(";
        }
    }

但是当单击一个按钮并使用

调用该功能时
    if($_SERVER['REQUEST_METHOD']=='POST')
    {
    update();
    } 

我明白了:

  

警告:copy()要求参数1为有效路径,第51行的itworked.php中给出的数组无法复制

     

警告:file()要求参数1为有效路径,第54行的itworked.php中给出的数组

     

警告:array_search()期望参数2为数组,在第55行的itworked.php中给出null

     

警告:array_splice()期望参数1为数组,在第56行的itworked.php中给出null

     

警告:join():第57行的itworked.php中传递的参数无效

     

警告:file_put_contents()期望参数1是有效路径,第57行的itworked.php中给出的数组

看起来$ fin是一个数组,我的函数不能在它上面执行,但我不明白为什么 - 不应该预先处理_POST的元素?

我是一个新手,新手和dummie,所以任何帮助都将非常感激。 谢谢。

UPD:当然,用&#34;更新&#34;进行调用,显然没有相关性。

UPD2: 我试过改变         foreach($ _POST as $ fin) 同         foreach($ _POST [&#39; optim&#39;]为$ fin)

这解决了大多数错误,但看起来该函数仍然无法识别文件名。这是错误:

警告:copy():第50行的itworked.php中的文件名不能为空

50行是:           if(!copy($ fin,$ newfile))

UPD3:

您好。 Per @ quasimodos-clone建议我试着回应$ fin并得到这样的东西:

../ dir / test.txt

,当前的工作目录是

/ files / testing /

所以我认为这可能是原因。所以我尝试使用$ _SERVER [&#39; DOCUMENT_ROOT&#39;],它不包含/ files / otherfolder中的文件,只包含/ files / testing /,但至少提供了一些东西。

这会将$ fin的输出更改为:

/files/testing/dir/test.txt

但是当我尝试通过提交添加该行时,我得到同样的错误:

警告:copy():文件名在/files/testing/itworked.php中不能为空

该行是:

   if (!copy($fin, $newfile)) { 

不知道下一步该尝试什么:(

0 个答案:

没有答案