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

?>

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.


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

3 Answers 3

4

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

Sign up to request clarification or add additional context in comments.

2 Comments

Same here. Also, a check for fgets() is needed as feof() usually still returns false after the last successful fgets().
I know this is old, but I remember that trim fixed it.
0

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.

3 Comments

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?
No, It does not matter at what position ;[
I agree, very strange. Only things I can think of at this point are something windows-specific or a typo introduced in testing.
0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.