加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php Smarty临时文件创建失败的解决办法

发布时间:2020-05-30 22:17:13 所属栏目:PHP 来源:互联网
导读:php Smarty临时文件创建失败的解决办法

对php Smarty临时文件创建失败的解决办法感兴趣的小伙伴,下面一起跟随脚本之家 jb51.cc的小编两巴掌来看看吧!
Smarty的编译文件是先生成tmp格式的临时文件再重命名回php和ini格式的编译文件的,使用的文件是: internals/core.write_file.php

如果临时文件生成失败,建议按以下步骤查找原因:
(1)检查临时文件目录的权限,是否赋给了写入权限
(2)如果不存在目录权限的问题,则检查当前系统是否禁用了tempnam()函数,以及tempnam()函数的第一个目录参数路径是否完整或存在问题
(3)如果以上问题都不存在,则检查临时文件目录下是否存在后缀名为tmp的文件,如果存在则说明问题应该出在rename函数上,建议参照如下修改:
修改的文件是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)   ***/


新修改成的代码为:

/**
* 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)   ***/
做以上修改虽可以解决这个问题,但如代码中注释所述,这个机制是为了解决文件死锁如写冲突一类的问题的,所以这种处理方法会有可能导致生成临时文件的时候出错,但经过本人自己试用,发现还没有出过错,所以大胆的改吧。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读