Jump to content

Problem Reading File when Name contains character numbers 63 ("?"),164, 186, 243, 248


Recommended Posts

Guest PHPBABY3
Posted

Problem Reading File when Name contains character numbers 63 ("?"),164, 186, 243, 248

 

I am trying to access all of the files in a directory, using

$a=opendir($dir) ; while ($file=readdir($a)) and

$b=file_get_contents($dir."/".$file). However, when $file contains

characters 63 ("?"), 164, 186, 243 or 248 $b is "". I tried

substituting each of the characters chr(0 to 255) for a single "?" in

file names but none of the resulting names created a value for $b

other than "".

 

How do I read these file contents?

 

P -

  • Replies 2
  • Created
  • Last Reply
Guest Andrew Lomakin
Posted

Re: Problem Reading File when Name contains character numbers 63 ("?"), 164, 186, 243, 248

 

Re: Problem Reading File when Name contains character numbers 63 ("?"), 164, 186, 243, 248

 

P,

 

? is a special symbol that shouldn't be used within a file name.

As for other symbols - 164 might require you to set a proper non-unicode

symbol table, and other symbols are just garbage, as far as i see the ASCII

table. I wouldn't suggest creating files that contain these letters anyways.

Regards,

 

Andrew

 

As for other symbols

"PHPBABY3" <shymathguy@gmail.com> wrote in message

news:9d5f3d5d-d969-4661-a504-e2833cedb835@a1g2000hsb.googlegroups.com...

>

> I am trying to access all of the files in a directory, using

> $a=opendir($dir) ; while ($file=readdir($a)) and

> $b=file_get_contents($dir."/".$file). However, when $file contains

> characters 63 ("?"), 164, 186, 243 or 248 $b is "". I tried

> substituting each of the characters chr(0 to 255) for a single "?" in

> file names but none of the resulting names created a value for $b

> other than "".

>

> How do I read these file contents?

>

> P -

Guest PHPBABY3
Posted

Re: Problem Reading File when Name contains character numbers 63("?"), 164, 186, 243, 248

 

Re: Problem Reading File when Name contains character numbers 63("?"), 164, 186, 243, 248

 

 

Here are suggestions that I have received from various sources and am

trying myself (to the extent that I know what he's talking about):

 

1. ? is a special symbol that shouldn't be used within a file name.

As for other symbols - 164 might require you to set a proper non-

unicode symbol table, and other symbols are just garbage, as far as i

see the ASCII table.

 

2. I think this is a trouble that has to do with the file system you

are using, some file systems requires prepending "\\?\" to the file

name to be able to get around it's normal file name checks.

 

3. If your code is working for normal files, odds are good that you

need to escape these special characters before you can read them.

Escaping these is dependent on your operating system, so the character

you'll use depends on the system you're running. If your system uses

the backslash to escape characters (ie, Linux), try writing these

characters with a leading backspace, ie:

foreach(glob("$dir/*") as $eachFile) {

$eachFile = preg_replace('/['.chr(63).chr(164).chr(186).']/', '\\\

\\\0', $eachFile);

print "$eachFile : ".strlen(file_get_contents($eachFile))."\n"; }

 

4. Question mark is illegal in file names on both Windows and Unix...

It is illegal on Windows, but it is quite valid in Unix. Forward

slash / is the only character that is invalid in a Unix file name.

Try replacing "?" with "%3F"

 

5. Try this one, just to explore some. echo(basename

($PHP_SELF)."<br>"); // returnes filename.php

 

6. You will need to construct a routine to preface the file read or to

actually dig into the PHP library and modify the base module for that

read.

 

7. Could we copy the original file to a standard name, or rename it,

without causing an error? I will look and see what ways the different

functions have of handling filenames and

pathing...


×
×
  • Create New...