The below is part of the OpenX server code (Smarty Plugin). When the fopen is called, the file is created successfully. But the fwrite doesn't write any data in the file and returns 0 (not FALSE).
The folder itself has the following permission: drwxrwxrwx nobody nobody
The file is created with the following permissions: -rw-r--r-- nobody nobody
Here's the code.
function smarty_core_write_file($params, &$smarty)
{
$_dirname = dirname($params['filename']);
if ($params['create_dirs']) {
$_params = array('dir' => $_dirname);
require_once(SMARTY_CORE_DIR . 'core.create_dir_structure.php');
smarty_core_create_dir_structure($_params, $smarty);
}
// write to tmp file, then rename it to avoid file locking race condition
$_tmp_file = tempnam($_dirname, 'wrt');
if (!($fd = fopen($_tmp_file, 'wb'))) {
$_tmp_file = $_dirname . DIRECTORY_SEPARATOR . uniqid('wrt');
if (!($fd = fopen($_tmp_file, 'wb'))) {
$smarty->trigger_error("problem writing temporary file '$_tmp_file'");
return false;
}
}
fwrite($fd, $params['contents']);
fclose($fd);
if (DIRECTORY_SEPARATOR == '\\' || !rename($_tmp_file, $params['filename'])) {
// On platforms and filesystems that cannot overwrite with rename()
// delete the file before renaming it -- because windows always suffers
// this, it is short-circuited to avoid the initial rename() attempt
unlink($params['filename']);
rename($_tmp_file, $params['filename']);
}
chmod($params['filename'], $smarty->_file_perms);
return true;
}
Below is the code I use to test this function:
$params = array('filename'=>'/usr/apache/www/templates_compiled/%%72^729^729250E1%%main.html.php', 'contents'=>'testString', 'create_dirs'=>TRUE);
smarty_core_write_file($params, NULL);