2010-02-23 135 views
2

我有我的Windows系統上的文件上傳奇怪的問題。我在服務器上使用Windows 7與iis7。我正在嘗試使用本地IP 10.47.47.13和服務器10.47.47.1奇怪的PHP文件上傳問題

我有一個非常簡單的形式,我不能讓它在某些情況下工作。該頁面停留在wwwroot上。 (http://10.47.47.1/3.php

3.php

<?php 
$source_file=$_FILES["newsimg"]["tmp_name"]; 
$destination_file="123.jpg"; 
$ftp_server="localhost"; 
$ftp_username="admin"; 
$ftp_password="apple"; 

    if ($source_file!="") { 
    $mrph_connect = ftp_connect($ftp_server,21); 
    $mrph_login= ftp_login($mrph_connect, $ftp_username, $ftp_password); 
    if (($mrph_connect) && ($mrph_login)) { 
     $upload = ftp_put($mrph_connect, $destination_file, $source_file, FTP_BINARY); 
     if ($upload) echo "ok"; else echo "nok"; 
    } 
    } 

?> 

<body> 
<form enctype="multipart/form-data" action="3.php" method="POST"> 
    <input type=file name=newsimg> 
    <input type=submit name=mrph> 
</form> 
</body> 

形式自稱要上傳的文件。當我選擇一個大小爲1或2 KB的文件時,它可以工作,但是當我選擇一個甚至是10 15 KB的文件時,頁面會在一段時間後超時。我檢查了php.ini設置文件上傳是否正確,我將temp文件夾設置爲c:\uploads只是爲了測試。因爲我說它的文件大小爲1或2KB,但不是在我選擇10或20KB的文件時。我甚至刪除了PHP代碼(評論所有內容),即使沒有做任何事情,它也可以看到,但事實並非如此。

任何幫助,將不勝感激。

回答

0

對我來說,問題似乎是你上傳你的文件,服務器的地方;上傳沒有任何問題,因爲能夠上傳較小的文件,但是當您上傳20 kb大小的文件時,您會失敗,請檢查以確保在要上傳文件的服務器上指定了正確的上傳設置。使用ftp並上傳到不同的服務器/位置本身雖然是緩慢的過程。你的代碼似乎也是對的。

+0

我想上傳與php文件所在位置相同的位置。wwwroot文件夾。什麼是你的意思是正確的上傳設置。 IIS上有這樣的設置嗎? – murphy 2010-02-23 08:26:35

0

我的猜測是,你ftp_put已超時,請嘗試將低於PHP的默認的FTP超時閾值(30秒):

$mrph_connect = ftp_connect($ftp_server,21); 

ftp_set_option($mrph_connect, FTP_TIMEOUT_SEC, 20); 

$mrph_login= ftp_login($mrph_connect, $ftp_username, $ftp_password); 
if (($mrph_connect) && ($mrph_login)) { 
    $upload = ftp_put($mrph_connect, $destination_file, $source_file, FTP_BINARY); 
    if ($upload) echo "ok"; else echo "nok"; 
} 

如果作出該項調整會導致你的腳本返回「諾」,那麼你」我會知道這個提議花費的時間太長了。

如果看跌是你的問題,你嘗試非阻塞把與ftp_nb_put到FTP異步文件:

$mrph_connect = ftp_connect($ftp_server,21); 
$mrph_login= ftp_login($mrph_connect, $ftp_username, $ftp_password); 
if (($mrph_connect) && ($mrph_login)) { 

    $ret = ftp_nb_put($mrph_connect, $destination_file, $source_file, FTP_BINARY); 
    while ($ret == FTP_MOREDATA) { 
    $ret = ftp_nb_continue($mrph_connect); 
    } 

    if ($ret == FTP_FINISHED) echo "ok"; else echo "nok"; 
} 
+0

我試了一下。但仍然沒有大於2 3KB的文件,即使是10KB的文件也無法上傳。它仍然超時。 正如我前面說過的,我嘗試了一些文件,如1 2 kb並上傳。我已經嘗試variuos大小的txt文件,但不能上傳。 – murphy 2010-02-23 08:26:08

+0

@murphy即使在添加FTP超時設置後腳本超時?您可以嘗試將其降至10秒。 – nortron 2010-02-23 08:30:27

+0

如果我從服務器運行我的腳本(如http://localhost/3.php),但它工作正常,但從客戶端嘗試超時(客戶端10.47.47.13的http://10.47.47.1/3.php) 我認爲這可能是阻止上傳過程的文件夾權限或限制。我沒有更改php.ini中的upload_tmp文件夾,因此它是windows/temp。 – murphy 2010-02-23 08:39:34

0

我認爲低溫是到的東西,它可以是php.ini文件isn' t正確配置並且最大文件大小較低?

0

這可能不是,但備案的形式,應該有對應的最大上傳大小

0

你可能有一個較低的大小限制的字節數的MAX_FILE_SIZE隱藏輸入。要檢查這一點:創建一個新的PHP文件,名爲info.php的或什麼,只是寫

<?php 
phpinfo(); 
?> 

打開該網頁在瀏覽器和搜索upload_max_filesize。檢查值;如果只有幾千字節,那就是你的問題。如果是這種情況,你將不得不修改你的php.ini(在Apache下,你也可以在.htaccess文件中使用指令,但我認爲沒有類似IIS的東西)。這個文件的位置可以根據您的安裝而有所不同,但它可能是C:\Windows\php.ini。找到upload_max_filesize指令並將其更改爲更大的內容。默認值是2兆字節(2M),但你可以做任何事情。