On my hosting provider i have a directory called hosts
that has a structure like this
. ├── hosts.php ├── ma_man_com.php └── ma_women_com.php 0 directories, 3 files
the content of hosts.php
file is this
<?php $folderhost = opendir ( "./" ); $hosy = readdir ( $folderhost ); while ( $hostname = readdir ( $folderhost ) ) { echo $hostname.PHP_EOL; } closedir ( $folderhost ); ?>
when i run hosts.php
i get this output
. .. hosts.php ma_man_com.php
so php doesn’t show ma_women_com.php
!
if i removed this useless line from hosts.php
$hosy = readdir ( $folderhost );
the output goes fine and it can read ma_women_com.php
in addition if i removed on letter from one of the files like renaming ma_women_com.php
to ma_women_co.php
then the output goes fine too
the strangest thing is that this behavior does not exist on my local host machine with windows 7 and xampp server
I know that the line that i removed from the code is useless and i can simply remove it and the problem will be solved but i’m curious why did this behavior happen and why it happened only on openshift linux servers ?
Advertisement
Answer
Your code with the extra readdir
skips the first entry read; since readdir
reads files in arbitrary order and it is platform dependent what the order is, this means that on one platform you may skip .
, on others a particular file; also note that the order of files may change if you change something in the directory, e.g. rename a file, which is apparently what happened when you removed one letter from the filename.