Написал функцию, пытаюсь передать номер строки которую нужно удалить. По итогу ничего не получается и строка не удаляется. Справа стоят 777.
function DeleteLine($line) {
$fopen=file($this->files);
unset($fopen[$line]);
$f=fopen($this->files, "w+");
foreach($fopen as $string) {
fwrite($f, $string);
}
fclose($f);
return true;
}
$strNum = 1;
$result = "";
$delLine = 2;
$fp = fopen("test.txt", "r");
while (!feof($fp)) {
$line = fgets($fp);
if ($strNum != $delLine) $result .= $line;
$strNum++;
}
fclose($fp);
$fw = fopen("test.txt", "w");
fwrite($fw, $result);
fclose($fw);
Еще вариант:
$file = preg_split("/\n/", file_get_contents("test.txt"));
unset($file[2]);
$fw = fopen("test.txt", "w");
foreach ($file as $str){
fwrite($fw, $str."\n");
}
fclose($fw);
Не большое замечание: так как в результате чтения файла, функция file() возвращает массив, элементы которого начинаются с нуля, то при попытке удаления первой строки DeleteLine(1) будет удалена вторая строка. В остальном же, код должен работать (у меня на локалке он работает) Посмотрите, что приходит в свойство $this->files - скорее всего только в этом и есть проблема.
Следующее, что не мешало бы подкорректировать, так это результат, возвращаемый функцией (у вас результат всегда true, даже если ничего не было удалено). Ну и конечно, не помешает проверка на существование удаляемого элемента. С учётом этих замечаний код будет иметь такой вид:
var_dump(DeleteLine(2));
// Функция возвращает строку, которая была удалена, или false
function DeleteLine($line) {
$delete_string = false;
$lines = file($this->files, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (isset($lines[--$line])) {
$delete_string = $lines[$line];
unset($lines[$line]);
$f = fopen($this->files, 'w+');
foreach ($lines as $string) {
fwrite($f, $string);
}
fclose($f);
}
return $delete_string;
}
Ваша функция рабочая, но я бы добавил проверку на существование файла:
function DeleteLine($line){
if (file_exists($this->files)){
$fopen = file($this->files);
unset($fopen[$line]);
$f = fopen($this->files, "w+");
foreach($fopen as $string) {
fwrite($f, $string);
}
fclose($f);
return true;
} else {
return false;
}
}
Далее смотрите, что возвращается true или false. Если false, значит проблема с $this->files
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Изучаю LaravelХочется понять структуру валидации данных
Есть РНР-файл с классом и функцией внутри класса, который подключается к файлу с главным классом: