以前本程序运行在2008系统的时候是一点问题都没有,我备份了一次移动过来2003服务器,修改了一些地址 全部正常,包括其他PHP程序都正常运行中..
唯独这个程序在上传的时候出现 【处理临时文件时出错!】 可是让我不知所云弄了两天 简直崩溃了 ,吐血屏幕~
在后台上传 就出现 我已经将部分文件夹进行写入权限 该给的都给了。读写一下是代码 提示错误的页面。<?php/**
* 类库:文件上传
* @copyright (C)2011 Cenwor Inc.
* @author Moyo <[email protected]>
* @package handler
* @name upload.han.php
* @version 1.0
*/class UploadHandler
{
public function Newz()
{
return new self();
}
private $exts = array();
private $maxSize = 0;
private $savePath = '';
public function AllowExts($exts)
{
$exts = explode(',', $exts);
foreach ($exts as $i => $ext)
{
$this->exts[strtolower($ext)] = true;
}
}
public function AllowSize($size)
{
list($unit, $val) = explode(':', $size);
$unitCalc = array(
'b' => 1,
'kb' => 1024,
'mb' => 1024*1024
);
$unitVal = $unitCalc[$unit];
$unitVal = ($unitVal > 0) ? $unitVal : 1;
$maxSize = $unitVal * (int)$val;
$this->maxSize = $maxSize;
}
public function SavePath($path)
{
$this->savePath = $path;
}
public function Process($field)
{
$files = $_FILES[$field];
$result = array();
if (isset($files[0]['name']))
{
foreach ($files as $i => $file)
{
$result[] = $this->Upload($file);
}
}
else
{
$result = $this->Upload($files);
}
return $result;
}
private function Upload($file)
{
if ($file['error'] != UPLOAD_ERR_OK)
{
return $this->GetError($file['error']);
}
$ext = $this->CheckExt($file);
if (!$ext)
{
return $this->GetError(501);
}
$size = $this->CheckSize($file);
if (!$size)
{
return $this->GetError(502);
}
$path = $this->MakePath($file);
if (!$path)
{
return $this->GetError(503);
}
if (false == move_uploaded_file($file['tmp_name'], $path))
{
if (false == copy($file['tmp_name'], $path))
{
return $this->GetError(504);
}
}
$result = array(
'name' => $file['name'],
'type' => $ext,
'mime' => $file['type'],
'size' => $size,
'path' => $path
);
return $result;
}
private function CheckExt($file)
{
$name = $file['name'];
$ext = strtolower(end(explode('.', $name)));
if (isset($this->exts[$ext]) && true === $this->exts[$ext])
{
return $ext;
}
return false;
}
private function CheckSize($file)
{
$size = $file['size'];
if ($size < $this->maxSize)
{
return $size;
}
return false;
}
private function MakePath($file)
{
$name = $file['name'];
$ext = strtolower(end(explode('.', $name)));
list($s, $ms) = explode(' ', microtime());
$hash = md5($name.$s.$ms);
$path = $this->savePath;
$flag = array(
'{$Y}', '{$M}', '{$D}', '{$EXT}', '{$HASH}'
);
$flag_val = array(
date('Y'), date('m'), date('d'), $ext, $hash
);
$path = str_ireplace($flag, $flag_val, $path);
$this->InitPath($path);
if ($this->Writeable($path))
{
return $path;
}
return false;
}
private function Writeable($file)
{
$fp = fopen($file, 'w');
$fp && fclose($fp) && unlink($file);
return $fp ? true : false;
}
private function InitPath($path)
{
$all = explode('/', $path);
$path = implode('/', array_slice($all, 0, count($all)-1));
if ( !is_dir($path) )
{
$list = explode('/', $path);
$path = '';
foreach ($list as $i => $dir)
{
if ($dir == '') continue;
$path .= $dir.'/';
if ( !is_dir($path) )
{
mkdir($path);
}
}
}
}
private function GetError($code)
{
$errMsg = array(
UPLOAD_ERR_INI_SIZE => __('上传文件太大![INI]'),
UPLOAD_ERR_FORM_SIZE => __('上传文件太大![FORM]'),
UPLOAD_ERR_PARTIAL => __('文件没有上传完整!'),
UPLOAD_ERR_NO_FILE => __('没有选择上传文件!'),
501 => __('不允许的上传文件类型!'),
502 => __('上传文件太大![MAX]'),
503 => __('上传目录无法写入!'),
504 => __('处理临时文件时出错!')
);
return $errMsg[$code];
}
}?>
在最后一行中 。。 504 => __('处理临时文件时出错!') 我只要在前面 加入 :// 就可以上传但是无图显示
唯独这个程序在上传的时候出现 【处理临时文件时出错!】 可是让我不知所云弄了两天 简直崩溃了 ,吐血屏幕~
在后台上传 就出现 我已经将部分文件夹进行写入权限 该给的都给了。读写一下是代码 提示错误的页面。<?php/**
* 类库:文件上传
* @copyright (C)2011 Cenwor Inc.
* @author Moyo <[email protected]>
* @package handler
* @name upload.han.php
* @version 1.0
*/class UploadHandler
{
public function Newz()
{
return new self();
}
private $exts = array();
private $maxSize = 0;
private $savePath = '';
public function AllowExts($exts)
{
$exts = explode(',', $exts);
foreach ($exts as $i => $ext)
{
$this->exts[strtolower($ext)] = true;
}
}
public function AllowSize($size)
{
list($unit, $val) = explode(':', $size);
$unitCalc = array(
'b' => 1,
'kb' => 1024,
'mb' => 1024*1024
);
$unitVal = $unitCalc[$unit];
$unitVal = ($unitVal > 0) ? $unitVal : 1;
$maxSize = $unitVal * (int)$val;
$this->maxSize = $maxSize;
}
public function SavePath($path)
{
$this->savePath = $path;
}
public function Process($field)
{
$files = $_FILES[$field];
$result = array();
if (isset($files[0]['name']))
{
foreach ($files as $i => $file)
{
$result[] = $this->Upload($file);
}
}
else
{
$result = $this->Upload($files);
}
return $result;
}
private function Upload($file)
{
if ($file['error'] != UPLOAD_ERR_OK)
{
return $this->GetError($file['error']);
}
$ext = $this->CheckExt($file);
if (!$ext)
{
return $this->GetError(501);
}
$size = $this->CheckSize($file);
if (!$size)
{
return $this->GetError(502);
}
$path = $this->MakePath($file);
if (!$path)
{
return $this->GetError(503);
}
if (false == move_uploaded_file($file['tmp_name'], $path))
{
if (false == copy($file['tmp_name'], $path))
{
return $this->GetError(504);
}
}
$result = array(
'name' => $file['name'],
'type' => $ext,
'mime' => $file['type'],
'size' => $size,
'path' => $path
);
return $result;
}
private function CheckExt($file)
{
$name = $file['name'];
$ext = strtolower(end(explode('.', $name)));
if (isset($this->exts[$ext]) && true === $this->exts[$ext])
{
return $ext;
}
return false;
}
private function CheckSize($file)
{
$size = $file['size'];
if ($size < $this->maxSize)
{
return $size;
}
return false;
}
private function MakePath($file)
{
$name = $file['name'];
$ext = strtolower(end(explode('.', $name)));
list($s, $ms) = explode(' ', microtime());
$hash = md5($name.$s.$ms);
$path = $this->savePath;
$flag = array(
'{$Y}', '{$M}', '{$D}', '{$EXT}', '{$HASH}'
);
$flag_val = array(
date('Y'), date('m'), date('d'), $ext, $hash
);
$path = str_ireplace($flag, $flag_val, $path);
$this->InitPath($path);
if ($this->Writeable($path))
{
return $path;
}
return false;
}
private function Writeable($file)
{
$fp = fopen($file, 'w');
$fp && fclose($fp) && unlink($file);
return $fp ? true : false;
}
private function InitPath($path)
{
$all = explode('/', $path);
$path = implode('/', array_slice($all, 0, count($all)-1));
if ( !is_dir($path) )
{
$list = explode('/', $path);
$path = '';
foreach ($list as $i => $dir)
{
if ($dir == '') continue;
$path .= $dir.'/';
if ( !is_dir($path) )
{
mkdir($path);
}
}
}
}
private function GetError($code)
{
$errMsg = array(
UPLOAD_ERR_INI_SIZE => __('上传文件太大![INI]'),
UPLOAD_ERR_FORM_SIZE => __('上传文件太大![FORM]'),
UPLOAD_ERR_PARTIAL => __('文件没有上传完整!'),
UPLOAD_ERR_NO_FILE => __('没有选择上传文件!'),
501 => __('不允许的上传文件类型!'),
502 => __('上传文件太大![MAX]'),
503 => __('上传目录无法写入!'),
504 => __('处理临时文件时出错!')
);
return $errMsg[$code];
}
}?>
在最后一行中 。。 504 => __('处理临时文件时出错!') 我只要在前面 加入 :// 就可以上传但是无图显示
解决的办法就是。php.ini中指向的 temp 文件夹 如果是默认就是在c:/windows 下 temp 权限设置 user 给一个写入权限和一个读取权限。一切搞定头疼的事情~