服务器端文件上传不稳定

时间:2014-10-22 09:03:21

标签: php apache ubuntu file-upload upload

我的应用程序取决于其上传文件的能力。

然而,在我更改了PHP.init文件中的一些设置之后,我正在试验我的文件上传的一些问题。

首先是一些重要信息:

  • 服务器是ubuntu 14.04
  • 我正在使用Apache 2.4

现在一切都始于我的客户无法将更大的文件上传到我的服务器上。所以我做的是更改php.ini中的设置:

(请注意我在这里/etc/php5/apache2/php.ini

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 250M


; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 500M

应用这些更改后,我调用了命令:sudo service apache2 restart

然后我尝试上传大小如下的文件:82.4 MB

在php中我正在使用以下函数来处理我的上传:

    public function uploadFile()
{
    if ($this->isAjax()) {
        $comp_id = $_POST['comp_id'];
        $name = $_FILES['file1']['name'];
        $name = substr($name, strpos($name, "."), strlen($name));
        switch ($name) {
            case '.jpg':
            case '.png':
            case '.jpeg':
            case '.bmp':
            case '.JPG':
            case '.PNG':
            case '.JPEG':
            case '.BMP':
                    $_FILES['file1']["name"] = "image_file".$name;
                break;
            case '.MP4':
            case '.mp4':
                $_FILES['file1']["name"] = "mp4_file".$name;
                break;
            case '.FLV':
            case '.flv':
            $_FILES['file1']["name"] = "flv_file".$name;
                break;
            case '.MP3':
            case '.mp3':
            $_FILES['file1']["name"] = "sound_file".$name;
            break;
            case '.docx':
            case '.txt':
            case '.pdf':
            case '.odt':
            case '.DOCX':
            case '.TXT':
            case '.PDF':
            case '.ODT':
                $_FILES['file1']["name"] = "document_file".$name;
                break;
            default:
                die("Unknown/not permitted file type");
        }
        $location = "./site/resources/upload/test_module/" . $comp_id . "/" . $_FILES['file1']["name"];
        if (!file_exists("./site/resources/upload/test_module/" . $comp_id . "/")) {
            mkdir("./site/resources/upload/test_module/" . $comp_id . "/", 0777, true);
        }
        move_uploaded_file($_FILES['file1']['tmp_name'],
            $location);

        chmod($location, 777);
        $path = "/site/resources/upload/test_module/" . $comp_id . "/" . $_FILES['file1']["name"];
        chmod($path, 777);

        switch ($name) {
            case '.jpg':
            case '.png':
            case '.jpeg':
            case '.bmp':
            case '.JPG':
            case '.PNG':
            case '.JPEG':
            case '.BMP':
                $this->getDatabase()->prepTemplate('UPDATE test_component SET image_path = ? WHERE id = ?', 'si', array($path, $comp_id));
                break;
            case '.MP4':
            case '.mp4':
                if ($_FILES['file1']['type'] != 'audio/mp3') {
                    $this->getDatabase()->prepTemplate('UPDATE test_component SET video_mp4_path = ? WHERE id = ?', 'si', array($path, $comp_id));
                } else {
                    $this->getDatabase()->prepTemplate('UPDATE test_component SET sound_path = ? WHERE id = ?', 'si', array($path, $comp_id));
                }
                break;
            case '.FLV':
            case '.flv':
                $this->getDatabase()->prepTemplate('UPDATE test_component SET video_flv_path = ? WHERE id = ?', 'si', array($path, $comp_id));
                break;
            case '.MP3':
            case '.mp3':
                $this->getDatabase()->prepTemplate('UPDATE test_component SET sound_path = ? WHERE id = ?', 'si', array($path, $comp_id));
                break;
            case '.docx':
            case '.txt':
            case '.pdf':
            case '.odt':
            case '.DOCX':
            case '.TXT':
            case '.PDF':
            case '.ODT':
                $this->getDatabase()->prepTemplate('UPDATE test_component SET text_path = ? WHERE id = ?', 'si', array($path, $comp_id));
                break;
            default:
                die("Unknown/not permitted file type");
        }
    }
}

正如您在此功能中所看到的,我尝试设置文件夹和文件的权限,以确保我之后可以访问它们。

上传时我尝试按照流程进行操作,发现服务器上没有创建任何文件夹,也没有添加任何文件。

所以有些东西告诉我上传失败了。

直到我更改了php.ini中的设置我可以上传较小的文件,但是现在我甚至无法上传大小为4 MB的文件。 (或任何其他文件)

上传在我的本地计算机上运行没有任何问题,但在我的服务器上没有。

有没有人在此之前对此进行过实验,或者对它可能是什么有所了解?

更新

添加错误打印后,我收到以下错误:

    Warning: chmod(): No such file or directory in /var/www/test_learningbank/site/pages/models/TestMaker.php on line 263

Warning: chmod(): No such file or directory in /var/www/test_learningbank/site/pages/models/TestMaker.php on line 265

打印出来的文件给了我:

{"name":"Vaks-DCK.mp4","type":"","tmp_name":"","error":1,"size":0}

值得注意的是,error = 1且size = 0 ??

0 个答案:

没有答案