У меня есть функция PHP, которая требует номер строки файла CSV, используемого в качестве базы данных. Как только он имеет строку, он переходит к определенному значению, которое необходимо изменить, изменяет его и перезаписывает целые файлы. Вот мой код:
<?php
function update($file, $id, $field, $value)
{
//$id is the line number
$contents = explode("\n", file_get_contents($file));
$fh = fopen($file, "w");
$lines = array();
foreach($contents as $line)
{
if($line == "")
continue;
$fields = explode("|", $line);
if($fields[0] == $id)
{
$line = null;
for($i = 0; $i<count($fields); $i++)
{
if($i == $field)
$fields[$i] = $value;
if($i != count($fields)-1)
$line .= $fields[$i]."|";
else
$line .= $fields[$i];
}
}
$line .= "\n";
fwrite($fh, $line);
}
fclose($fh);
$contents = null;
return true;
}
$id = $_SESSION['id'];
$uid = $_GET['p'];
$myfile = "myfile.txt";
if(update($myfile, 12, 14, "somevalue"))
echo "updated!";
?>
Я не могу найти проблему, потому что всякий раз, когда я запускаю код, он выводит «обновлено!» так же, как и должно, но при проверке файла я обнаружил, что он не был обновлен. Я не знаю почему, но это всегда остается неизменным! Благодарю.
Проверь это FWRITE () не подведет.
Сделайте что-то вроде этого:
...
$writeSuccess = (fwrite($fh, $line) !== false);
}
fclose($fh);
$contents = null;
return $writeSuccess;
}
...
Если это не удается, проверьте, правильно ли установлены разрешения вашей файловой системы. Пользователь Apache должен иметь права на запись в любой файл / папку, в которую вы записываете файл.
Я выяснил, в чем проблема.
$id = $_SESSION['id'];
$uid = $_GET['p'];
$myfile = "myfile.txt";
if(update($myfile, 12, 14, "somevalue"))
Номер строки указывал на предыдущую строку, что делало невозможным обновление первой строки файла. Так что все, что мне нужно было сделать, это
$line ++;