前端之家收集整理的这篇文章主要介绍了
php Smarty临时文件创建失败的解决办法,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对
PHP Smarty临时
文件创建失败的
解决办法感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!@H_
502_0@Smarty的编译
文件是先
生成tmp格式的临时
文件再
重命名回
PHP和ini格式的编译
文件的,使用的
文件是: internals/core.write_file.
PHP@H_
502_0@@H_
502_0@如果临时
文件生成失败,建议按以下步骤查找原因:@H_
502_0@(1)检查临时
文件目录的权限,是否赋给了写入权限@H_
502_0@(2)如果不存在目录权限的问题,则检查当前系统是否禁用了tempnam()
函数,以及tempnam()
函数的第一个目录参数路径是否完整或存在问题@H_
502_0@(3)如果以上问题都不存在,则检查临时
文件目录下是否存在后缀名为tmp的
文件,如果存在则说明问题应该出在rename
函数上,建议参照如下
修改:@H_
502_0@
修改的
文件是internals/core.write_file.
PHP 旧的
代码是:
/**
* PHP Smarty临时文件创建失败的解决办法
*
* @param
* @arrange 512-笔记网: www.www.jb51.cc
**/
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);
}
/**以下代码需要修改**/
$_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'])){
@unlink($params['filename']);
@rename($_tmp_file,$params['filename']);
}
@chmod($params['filename'],$smarty->_file_perms);
return true;
}
/*** 来自编程之家 jb51.cc(jb51.cc) ***/
@H_
502_0@@H_
502_0@新
修改成的
代码为:
/**
* PHP Smarty临时文件创建失败的解决办法
*
* @param
* @arrange 512-笔记网: www.www.jb51.cc
**/
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);
}
/**修改为如下代码**/
$fd=@fopen( $params['filename'],'wb');
if(!$fd){
return false;
}
fwrite($fd,$params['contents']);
fclose($fd);
@chmod($params['filename'],$smarty->_file_perms);
return true;
}
/*** 来自编程之家 jb51.cc(jb51.cc) ***/
做以上
修改虽可以
解决这个问题,但如
代码中注释所述,这个机制是为了
解决文件死锁如写冲突一类的问题的,所以这种处理
方法会有可能导致
生成临时
文件的时候出错,但经过本人自己试用,发现还没有出过错,所以大胆的改吧。
原文链接:https://www.f2er.com/php/528003.html