Re: mode problems in System::mkDir();
| From: | Greg Beaver | Date: | Mon, 19 Jan 2004 03:33:36 +0000 |
| Subject: | Re: mode problems in System::mkDir(); | ||
| References: | 1 | Groups: | php.pear.dev |
| Request: | Send a blank email to pear-dev+get-25143@lists.php.net to get a copy of this message | ||
Hi,
Applied a modified version of your fix to System.php. I figured people may pass in decimal values for one reason or another, and so if the number doesn't start with 0, it is simply converted to int, otherwise octdec() is used.
Greg
Alex Hayes wrote:
Hi, Perhaps I am using this package with the incorrect syntax, so il start by just supplying you with my call to the method.. Ive checked what values are getting set in the actual mkDir method and they all seemed correct... however see my solution below... <?php require_once("System.php"); $result = System::mkDir("-p -m 0700 ./newdir"); var_dump($result); ?> output is of course bool(true) However, say for example you do an ls -la on that directory.. =========8<======== $ ls -ladrwxrwxrwx 7 nobody nobody 4096 Jan 19 09:09 . drwxr-xr-x 7 ahayes Domain U 4096 Jan 7 17:01 .. d-w-r-xr-T 2 nobody nobody 4096 Jan 19 09:09 asdff=========>8======== As you can see, not really what its supposed to be... ;) i also tried supplying just an int by leaving the 0 off the 700 but still get the same problems (and also when i do alot of other permissions octal numbers...) Ive also tested it on a couple of different systems, however all are red hat (two are 7.3 with php 4.1.2, one is 9 with php 4.2.2) still the same problems.. So.. assuming its not something wrong with what im doing ;) i have been trying to work out why its not working and I believe i may have found out where its not working. I believe the problem is within the call to System::mkDir(); as we are supplying it with a string of options. Say for instance we do a var_dump(0700); we get int(511), however if we do a var_dump($mode); within our System::mkDir method we get a string("0770"); So i started playing around with converting the $mode, which is a string, to a integer by using octdec($mode) and it appears to work. Could the package maintainers please have a look at this, and if it does appear to be a problem, please make this change... I believe all that needs to happen is as follows...foreach($opts[0] as $opt) { if ($opt[0] == 'p') { $create_parents = true; } elseif($opt[0] == 'm') { $mode = octdec($opt[1]); } }thanks alex