阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

PHP文件上传小结(乱码,移动失败,权限,显示图片)

112次阅读
没有评论

共计 2250 个字符,预计需要花费 6 分钟才能阅读完成。

LAMP 环境:

Linux Mint 16 32bits xfce

apache 2.4.6 Ubuntu

php 5.5.3

默认 www 是 /var/www,我用符号连接到了 /home/tony/www

然后修改 sudo chmod 777 www

上传页面代码:

<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
</head>
<body>

<form action=”upload_file.php” method=”post”
enctype=”multipart/form-data”>
<label for=”file”>Filename:</label>
<input type=”file” name=”file” id=”file” />
<br />
<input type=”submit” name=”submit” value=”Submit” />
</form>

</body>
</html>

这个代码要加 head 指明字符集,下面的代码同理

<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
</head>
<?php
if ($_FILES[“file”][“error”] > 0)
  {
  echo “Error: ” . $_FILES[“file”][“error”] . “<br />”;
  }
else
  {
  echo “Upload: ” .$_FILES[“file”][“name”]. “<br />”;
  echo “Type: ” . $_FILES[“file”][“type”] . “<br />”;
  echo “Size: ” . ($_FILES[“file”][“size”] / 1024) . ” Kb<br />”;
  echo “Stored in: ” . $_FILES[“file”][“tmp_name”].”<br />”;
  }
  if(is_uploaded_file($_FILES[“file”][“tmp_name”])){
   echo “legal uploaded file<br>”;
   }else echo “illegai uploaded file<br>”;
  $src_path= $_FILES[“file”][“tmp_name”];
  $des_path= ‘/home/tony/www/upload/’.”a.jpg”;
  //$des_path= ‘/home/tony/www/upload/’.$_FILES[“file”][“name”];
  echo $src_path . “<br />”;
  echo $des_path . “<br />”;
  if(file_exists($src_path)){
   echo “file exists.<br />”;
  }
  if(move_uploaded_file($src_path,$des_path)){
      echo “Stored in: “.”<br />”;
  }else  echo”<br>move failed.”;
 printf(“<img src=%s />”,”upload/a.jpg”);
?>

这段出来代码冗杂,不美观。但是说明了一些问题。

1/ 还是要指定字符集,不然在不同的浏览器或者系统上会有问题,apache2 的配置文件不要 AddDefaultCharset 功能,如果改动过请改为 AddDefaultCharset Off; 重启 apache2

2/ 临时文件在 php 执行之后就会消失,肉眼难见,可以在最后来个 while(1);

3/ 有人问为什么不可以用其他函数来转移上传的文件呢?既然我都有路径了。http 这套上传机制可以保证一定安全性,如果你能验证上传的安全性,其他函数也可以胜任

4/ 我老是 move 不成功,后来几经调查,是新的路径没有权限,都是 linux 的安全性惹的祸。试过用 chmod -R 777 www,发现其下 upload 没有获得 777 的权限。。。这是 bug?重新对 upload 改权限即可

最后插入图片用绝对路径不行,要用相对路径,到现在我都不明白为什么

应该在上传处理 php 那里加入一些文件类型检测啊,文件头检测啊,禁止运行的限制,这些安全性或者功能限制等到有空我再补上来吧。

PHP 的详细介绍 :请点这里
PHP 的下载地址 :请点这里

推荐阅读:

生产环境实用之 LNMP 架构的编译安装 +SSL 加密实现 http://www.linuxidc.com/Linux/2013-05/85099.htm

LNMP 全功能编译安装 for CentOS 6.3 笔记 http://www.linuxidc.com/Linux/2013-05/83788.htm

CentOS 6.3 安装 LNMP (PHP 5.4,MyySQL5.6) http://www.linuxidc.com/Linux/2013-04/82069.htm

在部署 LNMP 的时候遇到 Nginx 启动失败的 2 个问题 http://www.linuxidc.com/Linux/2013-03/81120.htm

Ubuntu 安装 Nginx php5-fpm MySQL(LNMP 环境搭建) http://www.linuxidc.com/Linux/2012-10/72458.htm

《细说 PHP》高清扫描 PDF+ 光盘源码 + 全套教学视频 http://www.linuxidc.com/Linux/2014-03/97536.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计2250字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中