2016-08-05 114 views
0

因此,我正在從Web服務器上獲取一個Web項目並在XAMPP中使用它。在原始代碼中,用戶選擇要上傳的文件。提交時,文件被移動到公共html文件夾之外的上傳文件夾,然後用文件名更新數據庫。然後,我使用select語句從數據庫中獲取文件名。然後我使用一個php包含文件來查看img標籤中的圖像,並使用數據庫中的文件名。如何使用外部php文件查看xampp中的圖像?

我在項目文件夾中創建了一個上傳文件夾來存儲圖像(就像它是Web服務器中的上傳文件夾一樣),並分別更改了文件路徑。

所以我的問題是,圖像不顯示,一切工作,直到我到圖像文件讀取圖像,我不知道爲什麼。我試圖回顯出$ image變量來查看路徑,它也不顯示。所以我認爲它的圖像文件本身,但不能確定。不知道該從哪裏出發。

請仔細閱讀。

文件結構:

projectfolder

- 包括

-pagelets

-upload

小網頁代碼:

<?php 
//Upload Image 
if (isset($_POST['uploadImg'])) { 
    if (is_uploaded_file($_FILES['image']['tmp_name'])) { 
     if (move_uploaded_file($_FILES['image']['tmp_name'], "upload/{$_FILES['image']['name']}")) { 
      echo "File Uploaded"; 
     }else{ 
      echo "File not uploaded"; 
      $i = ''; 
     } 
     $i = $_FILES['image']['name']; 
    }else{ 
     $i =''; 
    } 

    //Update database 
    $query = "UPDATE Employees SET Photo = '$i' WHERE EmployeeID = {$_SESSION['EmpId']}"; 
    $result = @mysqli_query($dbc, $query);//Run the query 
} 
$query = "SELECT EmployeeID AS id, Photo AS photo, CONCAT(FirstName, ' ', LastName) AS name, PhoneNumber AS phone, Email AS email FROM Employees WHERE EmployeeID = '{$_SESSION['EmpId']}'"; 
$infoResult = @mysqli_query($dbc, $query);//Run the query 
if($infoResult){ 
    while($row = mysqli_fetch_array($infoResult, MYSQLI_ASSOC)){ 
?> 
<div id="profile-pic"> 
     <?php 
      echo "<img src=\"includes/view-image.inc.php?file={$row['photo']}\" alt=\"{$row['photo']}\" />"; 
     ?> 
     <form name="uploadForm" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>?pagelet=Dashboard" method="post" enctype="multipart/form-data"> 
      <input type="file" name="image"> 

      <input type="submit" name="uploadImg" value="submit"> 
     </form> 
    </div> 
<?php 
    } 
} 
?> 

包含文件:

<?php 
$path = "/upload/"; //directory outside public_html on the server 
$file = ($_GET['file']); 
$image = $path.$file; 
header("Content-Type: image/jpg"); 
@readfile($image); 
?> 
+1

什麼是當前文件路徑? – Mojtaba

+0

即** EXTREMELY ** 危險代碼。您允許訪問他們知道路徑的服務器上的任何文件。例如'example.com/include.php?file = ../../../../../etc/passwd' –

+0

不能在瀏覽器中查看php代碼。他們可以將文件名更改爲不同的路徑,但不會被讀取。另外我試圖弄清楚這一點,以便我可以做一些驗證,如文件擴展名,大小等... – JavaFox

回答

2

當你上傳的文件,你也許可以在任何地方與任何文件夾來工作,如果他們是可寫的。因爲上傳過程是服務器端。但是,當您想要訪問該文件以在網上顯示該文件時,應該使用public_html內的路徑。

因此,移動public_html文件夾中的上傳文件夾並記錄上傳過程的路徑。然後,你的代碼運行良好。

例如,目錄應該是這樣的:

的public_html/

- 上傳/

+0

該代碼在Web服務器上工作,它不在XAMPP中。我需要一個建議,允許我在XAMPP中使用此代碼。上傳文件夾是在項目文件夾(public_html) – JavaFox

+1

,這是一個非常好的,快速解決方案的建議。 – coderodour

+0

@JavaFox,所以,肯定你的路徑配置錯過了一些東西。你能否確認上傳是否超出服務器上的public_html? – Mojtaba