tags:

views:

424

answers:

5
<?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);

?>

If I have this: ficheros.txt: ExistingFile.txt ExistingFile2.txt ExistingFile3.txt... ... It works, but If I have at least 1 NON EXISTING FILE then It will take every file as a non existing one too.

What's wrong? I believe someting in the inner if condition.

+3  A: 

Hmm, well that works in Linux (though I have to trim the filename $buffer first).

Athena
Same here. Also, a check for fgets() is needed as feof() usually still returns false after the last successful fgets().
mweerden
A: 

I mean, what is wrong with the entire code.

I just need to make an array with arrays in it, a good result would be:

    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
     )
)
Aereal
A: 

Yeah, It works for me too if I have in ficheros.txt

Existingfile.txt
AnotherExistingfile.txt

Or

FakeFile.txt
FakeFile2.txt

But If I combine both of them:

Fakefile.txt
Existingfile.txt

It won't work, the script in the last case takes both files as non existing ones.

Aereal
Hmm.. that seems very strange. Are you using the exact same code as you posted here? Does it matter at what position the non-existing file is in ficheros.txt?
mweerden
No, It does not matter at what position ;[
Aereal
I agree, very strange. Only things I can think of at this point are something windows-specific or a typo introduced in testing.
Athena
A: 

Im not 100% why your wasn't but I played with it and this is working:

<?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);

?>

The results from the file I used:

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
        )

)

On second thought after looking at some of your comments, try it using exact paths instead of just the file name.

Unkwntech
A: 

It seems that the \n messed up my strings, so I added trim as Athena said and worked. Thanks

Aereal