[support] file_create_url() breaks some sites

Matt Connolly matt at cabinetuk.com
Fri Jul 4 14:43:30 UTC 2008


In either case, PUBLIC or PRIVATE, the resulting url for a file should  
look something like:

/path/to/filename

Which should then use the same "http://server/" part as the rest of  
the site.

urls, generally need to be absolute so that urls can be created that  
will work irrespective of the setting of "Clean URLs". eg:

Clean URL off:
drupal pages are at http://server/?q=drupal/path/page  ->  the path of  
these will *always* be "/" since thats the path that hosts the  
"index.php" file.

Clean URL on:
drupal pages are at http://server/drupal/path/page -> your browser  
thinks the path of the file is in a directory /drupal/path/ .

You can see that the setting of clean urls can change whether a  
relative link will work or not.

I think it's safe that url() defaults to making absolute urls that  
will work in both clean urls ON and OFF.


It also sounds like you might have a local network problem.

-Matt



On 04/07/2008, at 2:21 PM, Pierre Rineau wrote:

> Hi
>
> I have some problèmes with the CCK image field module. This is not  
> because of the module, but because of the core file_create_url()  
> function.
>
> I explain:
>
> <?php
> function file_create_url($path) {
>  // Strip file_directory_path from $path. We only include relative  
> paths in urls.
>  if (strpos($path, file_directory_path() . '/') === 0) {
>    $path = trim(substr($path, strlen(file_directory_path())), '\\/');
>  }
>  switch (variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC)) {
>    case FILE_DOWNLOADS_PUBLIC:
>      return $GLOBALS['base_url'] .'/'. file_directory_path() .'/'.  
> str_replace('\\', '/', $path);
>    case FILE_DOWNLOADS_PRIVATE:
>      return url('system/files/'. $path, NULL, NULL, TRUE);
>  }
> }
> ?>
>
> This give me an asbolute URL because of the use of $GLOBALS['url'].
>
> If we look at the url() function, we have a boolean parameter  
> $absolute, which is default setted to FALSE.
> If false is selected, , the method use base_path() as base for the  
> url, else it uses the global $base_url.
>
> Is this normal that drupal devs made the choice of always put  
> absolute URL for files ?
> Is this a bug ?
> If not, why ?
>
> The problem for me is that I use drupals behind proxies (they are in  
> a company LAN, using internal DNS which
> are not accessible from outside). When giving absolute pathes, the  
> site give me, through the proxy an internal
> DNS which does not work.
>
> -- 
> [ Drupal support list | http://lists.drupal.org/ ]



More information about the support mailing list