Этот вопрос был задан на доске объявлений, и я хочу получить окончательный ответ и разумные дебаты о том, какой метод является более семантически правильным и менее ресурсоемким.
Скажите, у меня есть файл с каждой строкой вэтот файл, содержащий строку.Я хочу сгенерировать хеш MD5 для каждой строки и записать его в тот же файл, перезаписывая предыдущие данные.Моей первой мыслью было сделать это:
$file = 'strings.txt';
$lines = file($file);
$handle = fopen($file, 'w+');
foreach ($lines as $line)
{
fwrite($handle, md5(trim($line))."\n");
}
fclose($handle);
Другой пользователь отметил, что file_get_contents () и file_put_contents () лучше, чем использование fwrite () в цикле.Их решение:
$thefile = 'strings.txt';
$newfile = 'newstrings.txt';
$current = file_get_contents($thefile);
$explodedcurrent = explode('\n', $thefile);
$temp = '';
foreach ($explodedcurrent as $string)
$temp .= md5(trim($string)) . '\n';
$newfile = file_put_contents($newfile, $temp);
Мой аргумент состоит в том, что, поскольку основная цель этого состоит в том, чтобы получить файл в массив , а file_get_contents () является предпочтительным способом чтения содержимогофайл в строку , file () является более подходящим и позволяет нам вырезать другую ненужную функцию, explode ().
Кроме того, непосредственно манипулируя файлом с помощью fopen (),fwrite () и fclose () (что точно так же, как один вызов file_put_contents ()), нет необходимости иметь посторонние переменные для хранения преобразованных строк;вы записываете их непосредственно в файл.
Мой метод точно такой же, как и альтернативный - такое же количество открытий / закрытий в файле - за исключением того, что мой метод короче и более семантически правильный.
Что вы хотите сказать, и какой бы вы выбрали?
Это должно быть более эффективным и менее ресурсоемким, как два предыдущих метода:
$file = 'passwords.txt';
$passwords = file($file);
$converted = fopen($file, 'w+');
while (count($passwords) > 0)
{
static $i = 0;
fwrite($converted, md5(trim($passwords[$i])));
unset($passwords[$i]);
$i++;
}
fclose($converted);
echo 'Done.';