使用PHP将大文件上传到FTP

时间:2012-05-01 14:44:00

标签: php file-upload ftp

我正在尝试将带有php的大文件上传到ftp服务器。我可以上传小文件,但我无法上传较大的文件。我查了一下,发现我需要设置upload_max_filesize和post_max_size,将ftp设置为被动模式,并将时间限制设置为never。我没有设置时间限制,我现在所拥有的并没有返回任何错误,但它也没有上传文件。如果你看一下底部的if (!$upload) {行,它应该回应一些东西,但事实并非如此。更重要的是,它只是不起作用。对于出现问题或者我需要做些什么才能使这项工作有任何见解?谢谢!

ini_set('upload_max_filesize', '50M');   
ini_set('post_max_size', '50M');  

$conn_id = ftp_connect($ftp_server);

// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// check connection
if ((!$conn_id) || (!$login_result)) {
        echo "FTP connection has failed!";
        echo "Attempted to connect to $ftp_server for user $ftp_user_name";
        exit;
}

 // turn passive mode on
ftp_pasv($conn_id, true);

if($_FILES['upload_file']['name']!=''){
    $source_file = $_FILES['upload_file']['tmp_name'];
    $destination_file = $_FILES['upload_file']['name']; 

    // upload the file
    $upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY);

    // check upload status
    if (!$upload) {
            echo "FTP upload has failed!<br />";
        } else {
            echo "Uploaded $source_file to $ftp_server as $destination_file<br />";
        }       
}

更新

我发现我无法从php页面设置upload_max_filesize值;另外,我似乎无法使.htaccess工作:如果我有.htaccess文件,则会导致HTTP错误500.此外,我无权访问php.ini。

我还能如何更改upload_max_filesize值?

更多信息

我的网络管理员告诉我,我在基于IIS的Windows系统上,所以.htaccess文件无效。有没有办法可以通过web.config影响文件上传大小?

2 个答案:

答案 0 :(得分:2)

从此网站:http://www.php.net/manual/en/ini.php

  

'upload_max_filesize'和'post_max_size'

的类型为PHP_INI_PERDIR

表示可以在“php.ini,.htaccess或httpd.conf”中设置Entry。所以你不能在脚本中设置它。

---编辑---

类似的问题: Changing upload_max_filesize on PHP

---编辑2 ---

就个人而言,我想做同样的事情(通过ftp上传大文件)并最终编写一个java应用程序。对于处理大文件,php并不是最好的方法。 Web浏览器并不是那么喜欢它。所以,对于处理大文件,我建议看看其他替代方案:(java,swf,javascript,...)

我有时间试试的是http://nodejs.org/

答案 1 :(得分:2)

正如@AngeDeLaMort正确指出的那样,你不能使用简写表示法来设置PHP.ini之外的配置值。

参考:Changing upload_max_filesize on PHP

尝试这样做。

在根目录中创建.htaccess文件并添加以下内容。

php_value upload_max_filesize 50M
php_value post_max_size 50M
php_value max_execution_time 200
php_value max_input_time 200