Re: Does this seem wrong to anyone else?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



daniel danon schreef:
Hi, I am new here..
Hmm, I think what you should add in your function, Yeti, is else -
wont it will be for better performance? and not the suppress the
error, and Jochem, then it will be perfect - wont it?

no, see my original critique. and note what Stut said about php5 ...
i.e. just use mkdir($dir, $mode, true);

I am not sure
about the else - but as long you provide to the PHP Processor more
information - wont it make him be faster?

no.


function recursive_mkdir($dir) {
       if (is_dir($dir)) return true;
       else {
              if (recursive_mkdir(dirname($dir))) return @mkdir($dir);
              return false;
       }
}

On Thu, Aug 21, 2008 at 3:42 PM, Jochem Maas <jochem@xxxxxxxxxxxxx> wrote:
Yeti schreef:
How about this one?

function recursive_mkdir($dir) {
       if (is_dir($dir)) return true;
       if (recursive_mkdir(dirname($dir))) return @mkdir($dir);
       return false;
}
covers half of one of my gripes about the OP's originally posted function.
and it introduces a regression in that file mode is no longer supported.

so I'd say it's no better.

On Thu, Aug 21, 2008 at 1:04 AM, Ashley Sheridan
<ash@xxxxxxxxxxxxxxxxxxxx> wrote:
Whats even more fun is inheriting somebody elses' *undocumented* code.
Oh, and if just happens to be in a strange programming language that you
don't know too well, all the better! Sounds awful, but it did happen to
me once :-/

Ash
www.ashleysheridan.co.uk


---------- Forwarded message ----------
From: Jochem Maas <jochem@xxxxxxxxxxxxx>
To: Robert Cummings <robert@xxxxxxxxxxxxx>
Date: Thu, 21 Aug 2008 00:52:09 +0200
Subject: Re:  Does this seem wrong to anyone else?
Robert Cummings schreef:
On Wed, 2008-08-20 at 14:09 -0700, Stephen Johnson wrote:
I am debugging someone else¹s code, and this is what they have :


1055    function mkdir_recursive($pathname, $mode)
1056    {
1057        is_dir(dirname($pathname)) ||
mkdir_recursive(dirname($pathname), $mode);
1058        return is_dir($pathname) || @mkdir($pathname, $mode);
1059    }

The part that bothers me is that mkdir_recursive calls itself from
within
itself.
I am not an expert on this particular type of thing, and maybe that is
allowed, but it seems wrong to me, and this error is being generated:
That's the point of recursion... to recursively call oneself!

Fatal error: Call to undefined function mkdir_recursive() in xxxxx.php
on
line 1057
the call to mkdir_recursive() on line 1057 is made inside
mkdir_recursive()
so it's impossible that the function doesn't exist ... unless the
function
you posted is actually a method of a class, in which case some time in
the past
the project included a standalone function mkdir_recursive() which is
been
removed. at least that would be my first/best guess.

Not sure why you're getting that error since it appears to be well
defined above... unless xxxxx.php is not the same file in which
mkdir_recursive() ha sbeen defined. I'll wager it's not... in which case
you need to ensure the file that contains the mkdir_recursive() function
declaration is included into xxxxx.php. BTW, FWIW, I wouldn't call the
above code good quality since it obfuscates its intent by using ||
hackishness. It's succinct but less obvious.
it's plain horrid, not to mention using is_dir() & dirname() twice
unnecessarily,
providing no checks as to whether the path exists and is a file or
whether file
permissions are okay (if your gonna wrap mkdir() might as well do a
proper job) , etc.

worst of all the call to mkdir() is error suppressed ... a nice big wtf
waiting
to happen when it fails.

oh and there is absolutely no need to use recursion here, a while loop
could
be used instead which would be more efficient.

lastly Stut pointed out that php5 negates the need for this function
altogether,
but you might still be stuck on php4 for some reason.

ain't it fun inheriting other peoples 'code' ;-)

Cheers,
Rob.
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php




--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux