2010-02-23 138 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),但你可以做任何事情。