Reputation: 205
<?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
)
)
Upvotes: 1
Views: 718
Reputation: 90951
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.
Upvotes: 0
Reputation: 205
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.
Upvotes: 0
Reputation: 3198
Hmm, well that works in Linux (though I have to trim the filename $buffer
first).
Upvotes: 4