[development] creating a file - path problems

Jennifer Hodgdon yahgrp at poplarware.com
Fri Nov 6 17:01:29 UTC 2009

Jeff Greenberg wrote:
> When coding
> realpath(file_directory_path()) . 'the/desired/filename.ext';
> Isn't there an assumption that file_directory_path() is relative to the 
> current path? Otherwise how does realpath know where it's intended to 
> go? Which kind of brings me back to the original question, of 
> file_directory_path being relative to...what? Will my current position, 
> when invoking file_directory_path() always be relative to the Drupal 
> root, even if the current page has a path that is a subdirectory off the 
> Drupal root?

file_directory_path() is relative to the Drupal root. PHP's realpath() 
function is relative to the "current" directory. If you have not run 
chdir() anywhere, it appears that PHP sets the current directory to 
the directory of the original PHP file (I think?), which would be the 
index.php file of Drupal, which is also in the Drupal root. So it does 
work, somewhat magically.

Incidentally, I'll just mention that the previous suggestion of
    $_SERVER['DOCUMENT_ROOT'] . $base_path . (whatever)
is not going to work in all situations, since depending on the Apache 
config, the directory for some web spaces may not even be under the 
server's document root. For instance, on my test box the doc root is 
/var/www/, but I have Apache configured so that the URL 
http://localhost/~xyz maps to /opt/www/xyz.

realpath(), on the other hand, works perfectly in this case. You can 
also do something like
     realpath( drupal_get_path('module', 'mymodulename'))
if you need to reference a file in your module directory for some 
reason (e.g. in a test).


Jennifer Hodgdon * Poplar ProductivityWare
Drupal, WordPress, and custom Web programming

More information about the development mailing list