2013-07-07 130 views
1

我想製作一個簡單的腳本,允許用戶將圖像上傳到我的數據庫。我有php fopen函數的問題。php fopen動態文件路徑

我需要允許用戶上傳他的計算機上的任何圖像文件,因此文件的路徑每次都是不同的。

<form method="POST"> 
     <input type="file" name="img"> 
     <input type="submit" value="uload"> 
    </form> 

這種簡單的形式返回文件的唯一字符串值,我需要使用,需要的文件直接路徑fopen函數打開文件。

fopen($_POST["img"],"r"); 

只有當文件與php腳本位於同一目錄時,這纔有效。

所以我問是否有辦法如何找到文件的存儲位置,所以我可以打開它使用fopen函數。

+1

HTTP:// WWW。 w3schools.com/php/php_file_upload.asp – WooDzu

+0

好的,這解釋了一切,非常感謝。 –

回答

1

我首先建議你必須看看PHP手冊中關於文件上傳:http://www.php.net/manual/en/features.file-upload.post-method.php

因爲這樣的代碼可以在你的系統中打開保障廳。一般來說,不建議在做一些檢查之前直接執行用戶文件,例如病毒掃描,圖像的二進制簽名,通過嘗試調整大小來驗證圖像等等。從性能的角度來看,不建議將它們保存在數據庫中。另外,如果您選擇上傳到目錄,則其權限應設置正確。

我將在這裏複製修改到您的情況下,從PHP手冊樣本文件上傳代碼:

HTML部分:

<!-- The data encoding type, enctype, MUST be specified as below --> 
<form enctype="multipart/form-data" action="YOUR_Upload_FILE.php" method="POST"> 
    <!-- Name of input element determines name in $_FILES array --> 
    <input name="img" type="file" /> 
    <input type="submit" value="Send File" /> 
</form> 

PHP部分:

<?php 
$uploaddir = '/var/www/uploads/'; 
$uploadfile = $uploaddir . basename($_FILES['img']['name']); 

//At this point you may like to check: 
/* 
1. Upload Errors in $_FILES 
2. Do virus check. 
3. Do binary check for the images type 
4. Do size check for the image 
5. Do actual image resize to confirm it is valid image. 
*/ 

//After everything is safe, you move the temporary file to your permanent store. 
echo '<pre>'; 
if (move_uploaded_file($_FILES['img']['tmp_name'], $uploadfile)) { 
    echo "File is valid, and was successfully uploaded.\n"; 
} else { 
    echo "Possible file upload attack!\n"; 
} 

echo 'Here is some more debugging info:'; 
print_r($_FILES); 

print "</pre>"; 

?> 
0
if ($_FILES["file"]["error"] == 0) { 
    fopen($_FILES["img"]["tmp_name"], 'r'); 
} 
+1

$ _FILES [「img」] [「tmp_name」]已包含上傳文件的絕對路徑 – WooDzu

+0

我的不好。不確定。謝謝。 –