Quel est le moyen le plus rapide et le plus simple de lire la première ligne uniquement à partir d'un fichier? Je sais que vous pouvez utiliser file
, mais dans mon cas, il ne sert à rien de perdre du temps à charger tout le fichier.
De préférence un one-liner.
Eh bien, vous pourriez faire:
$f = fopen($file, 'r');
$line = fgets($f);
fclose($f);
Ce n'est pas une ligne, mais si vous la définissiez en une ligne, vous seriez foutu pour la vérification des erreurs ou vous laisseriez des ressources ouvertes plus longtemps que nécessaire, alors je dirais de garder les lignes
Si vous FAITES _ ABSOLUMENT savoir que le fichier existe, vous pouvez utiliser une ligne unique:
$line = fgets(fopen($file, 'r'));
La raison en est que PHP implémente RAII pour les ressources.
Cela signifie que lorsque le descripteur de fichier sort du cadre (ce qui se produit immédiatement après l'appel de fgets dans ce cas), il sera fermé.
$firstline=`head -n1 filename.txt`;
$line = '';
$file = 'data.txt';
if($f = fopen($file, 'r')){
$line = fgets($f); // read until first newline
fclose($f);
}
echo $line;
Je suis impressionné que personne n'ait mentionné la fonction file ():
$line = file($filename)[0];
ou si version_compare (PHP_VERSION, "5.4.0") <0:
$line = array_shift(file($filename));
if(file_exists($file)) {
$line = fgets(fopen($file, 'r'));
}
Vous pouvez essayer de nous fread et déclarer la taille du fichier à lire.
Dans l'un de mes projets (qSandbox), j'utilise cette approche pour obtenir la première ligne d'un fichier texte que je lis quand même ..__ J'ai mes modèles de courrier électronique dans un fichier texte et le sujet dans la première ligne.
$subj_regex = '#^\s*(.+)[\r\n]\s*#i';
// subject is the first line of the text file. Smart, eh?
if (preg_match($subj_regex, $buff, $matches)) {
$subject = $matches[1];
$buff = preg_replace($subj_regex, '', $buff); // rm subject from buff now.
}