$input = explode("\n", file_get_contents("file.csv"));
foreach ($input as $line) {
// process all lines.
}
// This function removes first 100 elements.
// More info:
// http://php.net/manual/en/function.array-slice.php
$output = array_slice($input, 100);
file_put_contents("out.csv", implode("\n", $output));
The problem is happened when I trying to run the above code and I get:
"failed to open stream permission denied"
У вас есть 3 случая, в которых вы не можете изменить файл.
- Файл уже используется (заблокирован другим процессом).
- Файл не имеет соответствующих прав доступа (R/W). Или файл не принадлежит пользователю/группе, которую вы используете, в обязательном порядке для php-файлов (www-data).
- Файл не существует.
1) Если файл уже используется, вы не можете изменить его, но вы можете попробовать что-то другое *
A RACE CONDITION*
что может сделать это случиться:
# RACE CONDITION LOOP
# The only way you have here is to setup a RC loop to check if/when the file can be written.
$Path = dirname (__FILE__) . "path_to_your_file/out.csv";
$tries = 99; // Any number of tries you want.
for ($i = 1; $i < $tries; $i++)
{
$output = array_slice ($input, 100);
{
if (@file_put_contents ($Path , implode ("\n", $output)))
{
echo "Content Added!"."<br>";
$i = $tries;
}
else
{
echo "Content Cannot be Added!"."<br>";
}
}
ob_flush ();
echo "We Have tried " . $i . " times to add content to the file"."<br>";
sleep (1);
flush ();
}
2) Если файл не имеет права доступа вы можете установить его в вашем коде:
$Path = dirname (__FILE__) . "path_to_your_file/out.csv";
$Mode = 0755; // permissions wanted
$Umsk = @umask(0);
@chmod ($Path, $Mode);
@umask ($Umsk);
3) Если файл не существует, вы можете создать его, но сначала убедитесь, чтобы проверить, если она есть:
# Make sure the file that contain this code have the right permissions, user/group .
# If not this cannot create the file and will not allow you execute the whole code .
$Path = dirname (__FILE__) . "path_to_your_file/out.csv";
$Mode = 0755; // permissions wanted
$Check_File = file_exists ($Path);
if ($Check_File) { $File_Exist = true; }
else { $File_Exist = false; }
if ($File_Exist)
{
@touch ($Path);
@chmod ($Path, $Mode);
}
else
{
echo "File Already Exist";
}
Я надеюсь, что это может помочь, и если нет, пожалуйста, указать, что именно эта проблема.
PS: для ошибок ограничения памяти некоторые серверы и/или хост-провайдер не разрешают это в php.ini пользователя или из php. вы должны отредактировать глобальные файлы конфигурации для php и apache, а может быть и для mysql, если вы используете большой объем данных для базы данных, чтобы максимально использовать значение предела памяти.
Почему вы пишете csv каждую секунду в первую очередь? – PeeHaa
Некоторые важные данные. потому что файл растет, мне приходится удалять строки из него. Если я этого не делаю, я получаю: «PHP Неустранимая ошибка: допустимый размер памяти из ******** байт исчерпан (пытался выделить 71 байт) в /var/www/*******.php в строке 578 ", даже если я пишу ini_set (" memory_limit "," -1 "); – jhon4
Не можете ли вы отредактировать скрипт, который обновляет файл и удаляет лишние строки? –