2009-05-30 96 views
2

我已經使用了幾個腳本開始在我的開發機器上上傳文件。問題是,儘管此操作有預期的緩解,但每當我嘗試上載映像時,Apache似乎都會超時。上傳設置爲Ontmp目錄設置爲php.iniPHP上傳問題

我嘗試上傳谷歌的gif主圖片,8.36KB圖片。它應該很好,並且在PHP上傳功能的範圍內。

這是腳本的副本。應該有一個簡單的修復。根據要求,我將代字號更改爲實際目錄。

<?php 

if (!isset($_GET['upload'])) { ?> 
    <form method="post" action="index.php?upload=true" enctype="multipart/form-data"> 
    <input type="file" name="file" class="form"> 
    <input name="submit" type="submit"> 
    </form> 
<? } else if (isset($_GET['upload']) && $_GET['upload'] == 'true') { 
    $url = $_FILES['file']['name']; 
    $move = move_uploaded_file($_FILES['file']['tmp_name'], "/Users/<username>/Sites/file.jpg"); 
    if ($move) { 
     echo "Success!"; 
    } else { 
     echo "Err..." 
    } 
} ?> 

感謝, 丹

編輯:

我固定它,以幫助從幾個答案,對其中之一,我會慶祝。

這裏有幾件事導致了這種行爲。在images目錄

  1. 權限未設置爲允許用戶_www訪問它。 A chmod -R 777 images似乎修復它,以及sudo chown _www images

  2. 表單輸出可能已經破壞了PHP腳本本身。正如所暗示的那樣,ECHO <<< ...END幫助,我想。

+0

嘗試使用小圖片進行測試,以便確定是由於文件大小還是代碼和/或配置的問題。發佈你的結果。 – 2009-05-30 04:56:56

+0

我使用Google徽標進行了測試。仍然是一個不行。 – 2009-05-30 14:45:09

回答

2

這很可能是Apache用戶和指定目錄之間文件大小和/或權限問題的問題。例如,確保Apache實例不在用戶(nobody)下運行。

對混沌的評論: 他是正確的代字號(〜)可能會導致問題,但可能不會導致超時;它會顯示一個警告。即使它在你的系統上工作,它也可能將文件存入一個意想不到的目錄,或者如果Apache用戶(即www)沒有有效的主目錄集,就會遇到一些問題。

2

如果問題是文件大小,下面幾行添加到您的php.ini文件,它應該工作:

upload_max_filesize = 500M ; 
post_max_size = 500M ; 
+0

這不是,我嘗試上傳一個非常小的(`8.36KB`)文件,40分鐘後,還是什麼都沒有。 – 2009-05-30 14:41:19

3

是什麼導致你相信,阿帕奇已超時,而不是說,以某種方式徹底失敗?因爲跳到我身上的是你試圖將文件移動到~/file.jpg,我幾乎肯定不會工作; ~是一個通常只在shell中有意義的構造,除非PHP的一些奇特的晦澀特性正在像這樣的上下文中處理它。無論如何,嘗試把實際的目錄。

+0

不知道,除了請求需要FOREVER完成。事實上,它並沒有完成。最後一次嘗試並停止它已經過了幾分鐘。 Apache中沒有記錄有關此操作的記錄。 – 2009-05-30 14:22:25

2

默認情況下,PHP頁面上有30秒的超時時間。因此,如果您的上傳時間超過30秒,則會失敗。在你的php.ini中設置超時時間,或者將下面的代碼放在文件的頂部。

ini_set(max_execution_time, 90); 

第二個參數表示頁面超時之前的秒數。將它設置爲任何你認爲合適的時間。另外,混沌是正確的,因爲'〜'是一種通常僅在殼內具有意義的構造。

回覆:http://ca2.php.net/manual/en/ini.list.php

編輯: 的問題是,你重新在有條件的中間標籤。嘗試你的代碼我得到一個語法錯誤。很奇怪你能看到任何網頁表單。這是固定代碼(適用於我)。

<?php 
if (!isset($_GET['upload'])) { 
ECHO <<<END 
    <form method="post" action="index.php?upload=true" enctype="multipart/form-data"> 
    <input type="file" name="file" class="form"> 
    <input name="submit" type="submit"> 
    </form> 
END; 
} else if (isset($_GET['upload']) && $_GET['upload'] == 'true') { 
    $url = $_FILES['file']['name']; 
    $move = move_uploaded_file($_FILES['file']['tmp_name'], "/Users/<username>/Sites/file.jpg"); 
    if ($move) { 
     echo "Success!"; 
    } else { 
     echo "Err..."; 
    } 
} ?> 
+0

即使設置了超時,Safari仍然表示正在加載頁面。這是在我腳本頂部的提示行。 – 2009-05-30 14:46:14