In an clean fresh Installation the variable 'file_directory_temp' is not set up correct in the script 'includes/file.inc' (function file_directory_temp).

Running Apache 2 with virtual hosts, PHP 4.3.10, Zend Engine v1.3.0, PHP.ini safe_mode=On + open_base_dir=/path/to/my/website + upload_tmp_dir=/path/to/my/website/php_tmp

If 'safe_mode = On' and 'open_base_dir = /srv/www/mysite.com/' is set in php.ini or via apache i get an error when trying to import an language:
open_basedir restriction in effect. '/tmp' is not within the allowed path(s): ...

The error seems to be in includes/file.inc line 687 (function file_directory_temp() ; see underlined line). It is in currently (starting at line 681 for better understanding):

// Has PHP been set with an upload_tmp_dir?
if (ini_get('upload_tmp_dir')) {
$directories[] = ini_get('upload_tmp_dir');
}

// Operating system specific dirs.
if (substr(PHP_OS, 0, 3) == 'WIN') {
$directories[] = 'c:\\windows\\temp';
$directories[] = 'c:\\winnt\\temp';
$path_delimiter = '\\';
}
else {
$directories[] = '/tmp';
$path_delimiter = '/';
}

The error should get fixed if changing line 687 to
elseif (substr(PHP_OS, 0, 3) == 'WIN') {
because if there is set up an upload_tmp_dir in php.ini, there should not be an check for Windows OS.
There should only be an check for Windows OS if no upload_tmp_dir ist set.

The error can only be reproduced when the variable file_directory_temp has not been set by drupal. The easiest way to get this condition should be to set up an new drupal installation.
I got little trouble to reproduce this failure due to some caching effects i think, or because in setup of drupal is set file_directory_temp up in an another script or so.

If you got further questions, please contact me.

CommentFileSizeAuthor
#2 windows-temp.png68.35 KBdrutube
Support from Acquia helps fund testing for Drupal Acquia logo

Comments

drutube’s picture

Bravo,

Amazing really. I've been pulliing hair trying to figure this out. In fact it will stop the backup module cold. Backup module is hardly maintained and I think this is the cause of the mysterious but never fixed bugs. When you look closely at the error it says

backup_files(): Command 'tar cfz /tmp/backup-htdocs-MVSqRk install.php profiles misc scripts includes themes xmlrpc.php sites UPGRADE.txt update.php b.tar CHANGELOG.txt files .htaccess modules INSTALL.pgsql.txt _notes pictures INSTALL.txt MAINTAINERS.txt robots.txt c:\windows\temp index.php INSTALL.mysql.txt cron.php LICENSE.txt drupal-backup-db-20080327033312-549481290.sql.gz

Now that's funny becasue Drupal is on Cent OS 5. When I run ls I can't see anything in the directory but running ls -l shows c:\windows\temp . I delete with rm -f c:\windows\temp and no problem... but.. when I run backup I get the above error and guess what? The c:\windows\temp is back in the drupal root.

Now how is that? You supplied the answer above. This is a seriously sneaky and as a result very hard to catch bug in Drupal.

drutube’s picture

Version: 5.6 » 5.7
FileSize
68.35 KB

I'm unable to remove the c:\windows\temp from the drupal root directory. The OS is cent os5. I can see a directory or file called c:\windows\temp but it is indestructable. Yes I'm logged in as root and yes I tried to unlink it. Nothing works.

niccottrell’s picture

You should be able to remove this directory with:

rm -rf "c:\\windows\\temp"/

Damien Tournoud’s picture

Status: Active » Closed (won't fix)

There are no errors here. I guess the original poster forgot to create the "/path/to/my/website/php_tmp" dir.