我正在尝试创建一个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)) {
不知道下一步该尝试什么:(