PHP文件上傳小結(亂碼,移動失敗,權限,顯示圖片)

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那裏加入一些文件類型檢測啊,文件頭檢測啊,禁止運行的限制,這些安全性或者功能限制等到有空我再補上來吧。

20140309  21:02 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章