2010-08-15 5 views
0

J'ai besoin de comparer deux fichiers texte en PHP. Un fichier est téléchargé par l'utilisateur, et l'autre est fourni par le serveur, s'exécutant sur Windows. Cela fonctionne très bien lorsque le fichier est soumis à partir d'un autre ordinateur Windows, mais à partir d'un ordinateur Linux, les fichiers sortent différemment, je suppose que cela est dû à des fins de ligne différentes. Existe-t-il un moyen facile de comparer les fichiers texte Windows aux fichiers texte Linux?Comment comparez-vous deux fichiers texte avec des fins de ligne différentes en PHP?

Actuellement c'est mon code;

$text1 = file_get_contents($file1); 
$text2 = file_get_contents($file2); 
if (strcmp($content, $content2) == 0) { etc; 

Répondre

6

Vous pouvez remplacer CRLF les fins de ligne avec LF fins de ligne ou l'inverse dans les deux fichiers - essayez quelque chose comme ceci:

$text1 = str_replace("\r\n", "\n", $text1) 

Et même pour $text2.

0
preg_replace('/\v+/','\n',$text1)==preg_replace('/\v+/','\n',$text2) 
1

Juste pour ajouter une autre, potentiellement option plus portable (le remplacement suggéré par les autres answerers seront déjà fines pour votre cas), la fonction file() divise les données de fichiers dans un tableau et semble être en mesure de gérer à la fois encodages Windows et Linux:

$text1 = file($file1, FILE_IGNORE_NEW_LINES); 
$text2 = file($file2, FILE_IGNORE_NEW_LINES); 

if ($text1 === $text2) .... 

Il peut également traiter les fins de ligne Macintosh si le paramètre d'exécution auto_detect_line_endings est activée.

Questions connexes