2008-12-14 9 views
1
<?php 

function data_info($data) 
{ 
    if ($data) { 
     while (!feof($data)) { 
      $buffer = fgets($data); 
      if (file_exists($buffer)) { 
      $bufferArray[$buffer]['Exists'] = (file_exists($buffer)); 
      $bufferArray[$buffer]['Readable'] = (is_readable($buffer)); 
      $bufferArray[$buffer]['Writable'] = (is_writable($buffer)); 
      $bufferArray[$buffer]['Size'] = (filesize($buffer)); 
      } else { 
       $bufferArray[$buffer]['Exists'] = "No"; 
      } 
     } 
     print_r($bufferArray); 
    } else { 
     echo "The file could not be opened"; 
    } 
} 

$data = fopen("D:/xampp/htdocs/Practice/ficheros.txt", "r"); 
data_info($data); 

?> 

Si j'ai ceci: ficheros.txt: ExistingFile.txt ExistingFile2.txt ExistingFile3.txt ... ... Il fonctionne, mais si je dois au moins 1 FICHIER NON EXISTANT Alors il prendra aussi chaque fichier comme non existant.Le fichier existe code php

Qu'est-ce qui ne va pas? Je crois que quelque chose dans la condition intérieure si.


Je veux dire, quel est le problème avec le code entier.

J'ai juste besoin de faire un tableau avec des tableaux en elle, un bon résultat serait:

array 
(
    'text.txt' => array 
     (
     'exists' => true, 
     'readable' => true, 
     'writable' => true, 
     'Size' => 64 
     ), 

    'document.doc' => array 
     (
     'exists' => false 
     ), 

    'photo.jpg' => array 
     (
    'exists' => true, 
    'readable' => true, 
    'writable' => false, 
    'size' => 354915 
     ) 
) 

Répondre

4

Hmm, bien que fonctionne sous Linux (bien que je dois couper le nom de fichier $buffer premier).

+0

Même ici. De plus, une vérification de fgets() est nécessaire car feof() retourne toujours false après le dernier fgets réussi(). – mweerden

+0

Je sais que c'est vieux, mais je me souviens que l'assiette l'a corrigé. –

0

Ouais, ça marche pour moi aussi si j'ai dans ficheros.txt

Existingfile.txt 
AnotherExistingfile.txt 

Ou

FakeFile.txt 
FakeFile2.txt 

Mais si je combine les deux:

Fakefile.txt 
Existingfile.txt 

Il a gagné ne fonctionne pas, le script dans le dernier cas prend les deux fichiers comme des fichiers non existants.

+0

Hmm .. cela semble très étrange. Utilisez-vous exactement le même code que vous avez posté ici? Est-ce important à quelle position le fichier inexistant se trouve dans ficheros.txt? – mweerden

+0

Non, peu importe à quelle position; [ –

+0

Je suis d'accord, très étrange. Seules les choses que je peux penser à ce stade sont quelque chose de spécifique à Windows ou une faute de frappe introduite dans les tests. – Athena

0

Je ne suis pas 100% pourquoi votre était pas, mais je joue avec elle et que cela fonctionne:

<?php 

function data_info($data) 
{ 
    if (!$data){return "The file could not be opened";} 
    while (!feof($data)) 
    { 
     $buffer = implode('',fgetcsv($data));//fgetcsv will only return an array with 1 item so impload it 
     if(file_exists($buffer)) 
     { 
      $bufferArray[$buffer]['Exists'] = (file_exists($buffer)); 
      $bufferArray[$buffer]['Readable'] = (is_readable($buffer)); 
      $bufferArray[$buffer]['Writable'] = (is_writable($buffer)); 
      $bufferArray[$buffer]['Size'] = (filesize($buffer)); 
     } 
     else 
     { 
      $bufferArray[$buffer]['Exists'] = "No"; 
     } 
    } 
    print_r($bufferArray); 
} 

$data = fopen("c:/file.txt", "r"); 
data_info($data); 

?> 

Les résultats du fichier je:

Array 
(
    [c:/messageService.log] => Array 
     (
      [Exists] => 1 
      [Readable] => 1 
      [Writable] => 1 
      [Size] => 0 
     ) 

    [c:/setup.log] => Array 
     (
      [Exists] => 1 
      [Readable] => 1 
      [Writable] => 1 
      [Size] => 169 
     ) 

    [c:/fake1.txt] => Array 
     (
      [Exists] => No 
     ) 

    [c:/fake2.txt] => Array 
     (
      [Exists] => No 
     ) 

) 

À la réflexion après avoir regardé certains de vos commentaires, essayez-le en utilisant des chemins exacts au lieu du nom du fichier.

Questions connexes