php中的ftp文件上传问题


ftp file upload problems in php

我已经在谷歌上搜索了一整天,试图找到所有我能找到的东西,但都不起作用。我开始绝望了。

我正在尝试制作一个可以将文件上传到我的ftp帐户的脚本,但到目前为止我还没能让它正常工作。

我得到这些错误:

警告:ftp_put():正在打开用于文件传输的数据通道。在里面C: ''axamplep''htdocs''AA''dwsite''ftptest''up.php,第49行

致命错误:中超过了30秒的最长执行时间C: ''axamplep''htdocs''AA''dwsite''ftptest''up.php,第49行

这是我正在使用的代码:

<?php
if (isset ( $_FILES ['be_file'] )) {
    $file_size = $_FILES ['be_file'] ['be_file'];
    $file_type = $_FILES ['be_file'] ['type'];
    $source_file = $_FILES ['be_file'] ['tmp_name'];
    $destination_file = $_FILES ['be_file'] ['name'];
//ftp details   
    $ftp_server = 'ip of ftp';
    $ftp_port = 'port number';
    $ftp_user_name = 'username';
    $ftp_user_pass = 'pass';
    // set up basic connection
    $conn_id = ftp_connect ( $ftp_server, $ftp_port );
    ftp_pasv ( $conn_id, true );
    // login with username and password
    $login_result = ftp_login ( $conn_id, $ftp_user_name, $ftp_user_pass );
    // upload a file
    if (ftp_put ( $conn_id, $destination_file, $source_file, FTP_BINARY )) {
        echo "successfully uploaded $source_file'n";
        exit ();
    } else {
        echo "There was a problem while uploading $source_file'n";
        exit ();
    }
    // close the connection
    ftp_close ( $conn_id );
    echo "Success";
}
?>
<html>
<body>
    <form action="" method="POST" enctype="multipart/form-data">
        <input type="file" name="file" /> <input type="submit" />
        <ul>
            <li>Sent file: <?php echo $_FILES['be_file']['name'];  ?>
            <li>File size: <?php echo $_FILES['be_file']['size'];  ?>
            <li>File type: <?php echo $_FILES['be_file']['type']?>
        </ul>
    </form>
</body>
</html>

最大执行时间整数

  • max_execution_time = 300添加到php.ini文件服务器中。然后重新启动php-fpm服务并重新启动服务器
  • 或者在代码中添加set_time_limit(0);
  • 或者,如果您无法访问php.ini文件,您可以延长最长执行时间,如下所示:ini_set('max_execution_time', 300); //300 seconds = 5 minutes

这设置了允许脚本在被解析器终止之前运行的最长时间(以秒为单位)。这有助于防止写得不好的脚本占用服务器。默认设置为30。从命令行运行PHP时,默认设置为0。

最长执行时间不受系统调用、流操作等的影响。有关详细信息,请参阅set_time_limit()函数。

在安全模式下运行时,不能使用ini_set()更改此设置。唯一的解决方法是关闭安全模式或通过更改php.ini中的时间限制。

Php文档->最大执行时间

我认为您出现此错误是因为您在登录之前调用了ftp_pasv函数:

ftp_pasv ( $conn_id, true );
$login_result = ftp_login ( $conn_id, $ftp_user_name, $ftp_user_pass );

应为:

$login_result = ftp_login ( $conn_id, $ftp_user_name, $ftp_user_pass );
ftp_pasv ( $conn_id, true );

如果它能帮助别人。;)