Afficher un message
Vieux 06/02/2006, 10h47   #9
Jan Rosier
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [SMARTY] Re: windows problem with loads of *.tmp files - MOREinfo

Maybe this is your problem

http://bugs.php.net/bug.php?id=23069 Bug #23069 tempnam creates
readonly file.

Try upgrading PHP

Greetings,
Jan Rosier



Pedro wrote:
> SO php can delete the actual compiled templates..
>
> but not any *.tmp files
>
> notice that the path is the compile_dir ... coud this not be the
> $_ENV['tmp'] directory ??
>
> current:
> $_tmp_file = tempnam($_dirname, 'wrt');
> suggested
> $_tmp_file = tempnam($_ENV['tmp'], 'wrt');
>
> Still banging my head against wall !!
>
> regards
>
> Pete
>
> Jan Rosier wrote:
>> Try removing the @ from the code. So @fopen becomes fopen and so on.
>> See if PHP reports any errors after you do this.
>>
>> To make sure error reporting is on you can add the following lines to
>> the code:
>>
>> ini_set('display_errors', 1);
>> error_reporting(E_ALL);
>>
>> Greetings,
>> Jan Rosier
>>
>>
>>
>> Pedro wrote:
>>
>>> Didnt make any difference .. not sure what is happening ""
>>>
>>> pete
>>>
>>> Jan Rosier wrote:
>>>
>>>> The attached php file got lost. This time the file is attached as
>>>> text file. Hope this works...
>>>>
>>>> Greetings,
>>>> Jan Rosier
>>>>
>>>>
>>>> Jan Rosier wrote:
>>>>
>>>>> I think the problem is in the file
>>>>> libs/internals/core.write_file.php. Try the patched version
>>>>> attached to this mail.
>>>>>
>>>>> Here is what I think is happening:
>>>>> At line 28 an temp file is created, then at line 30 this file is
>>>>> opened for writing.
>>>>> If opening the temp file fails Smarty will try to create a temp
>>>>> file using uniqid() (line 31)
>>>>> But the temp file already created at line 28 isn't removed first.
>>>>>
>>>>> I also attached a diff to the last version that is in the cvs.
>>>>>
>>>>> Greetings,
>>>>> Jan Rosier
>>>>>
>>>>>
>>>>
>>>> ------------------------------------------------------------------------
>>>>
>>>>
>>>> <?php
>>>> /**
>>>> * Smarty plugin
>>>> * @package Smarty
>>>> * @subpackage plugins
>>>> */
>>>>
>>>> /**
>>>> * write out a file to disk
>>>> *
>>>> * @param string $filename
>>>> * @param string $contents
>>>> * @param boolean $create_dirs
>>>> * @return boolean
>>>> */
>>>> 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'))) {
>>>> if (file_exists($_tmp_file)) {
>>>> @unlink($_tmp_file);
>>>> }
>>>> $_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);
>>>>
>>>> // Delete the file if it allready exists (this is needed on Win,
>>>> // because it cannot overwrite files with rename()
>>>> if (file_exists($params['filename'])) {
>>>> @unlink($params['filename']);
>>>> }
>>>> @rename($_tmp_file, $params['filename']);
>>>> @chmod($params['filename'], $smarty->_file_perms);
>>>>
>>>> return true;
>>>> }
>>>>
>>>> /* vim: set expandtab: */
>>>>
>>>> ?>
>>>
>>>

>

  Réponse avec citation
 
Page generated in 0,07684 seconds with 9 queries