无法使用PHP move_uploaded_file在EC2中上传文件

时间:2017-03-31 01:52:03

标签: php amazon-ec2

我正在尝试在EC2中使用PHP上传一个zip文件。

$count = 0;
    if ($_SERVER['REQUEST_METHOD'] == 'POST'){
        foreach ($_FILES['files']['name'] as $i => $name) {
            if (strlen($_FILES['files']['name'][$i]) > 1) {
                if (move_uploaded_file($_FILES['files']['tmp_name'][$i], $dirPath.strtolower($name))) {
                    $count++;
                }else{
                die ("not success no file sorry in move_upload" . $dirPath.strtolower($name) . "  ". $numFiles . " ".$count);
              }
            }else{
              die ("not success no file sorry in strlen" . $numFiles . " ".$count);
            }
        }
    }else{
      die ("not success no file sorry" . $numFiles . " ".$count);
    }

此代码在上失败如果(move_uploaded_file ,$ _FILES没问题。但问题出在 move_uploaded_file

我的ps aux | grep apache输出是

apache   23762  0.0  3.1 570272 32488 ?        Sl   Mar29   0:14 /usr/sbin/httpd
apache   26487  0.0  2.7 565912 27628 ?        Sl   Mar30   0:08 /usr/sbin/httpd
apache   26488  0.0  3.3 572044 34396 ?        Sl   Mar30   0:08 /usr/sbin/httpd
apache   27416  0.0  2.7 762324 28080 ?        Sl   Mar30   0:07 /usr/sbin/httpd
apache   27838  0.0  2.5 563948 26104 ?        Sl   Mar30   0:06 /usr/sbin/httpd
apache   27839  0.0  2.7 566384 28124 ?        Sl   Mar30   0:06 /usr/sbin/httpd
apache   28124  0.0  2.3 560860 23472 ?        Sl   Mar30   0:05 /usr/sbin/httpd
apache   28173  0.0  1.9 455504 20160 ?        Sl   Mar30   0:04 /usr/sbin/httpd
apache   28175  0.0  1.9 455504 20168 ?        Sl   Mar30   0:04 /usr/sbin/httpd
apache   28176  0.0  1.9 455504 20200 ?        Sl   Mar30   0:04 /usr/sbin/httpd
ec2-user 31044  0.0  0.2 110460  2192 pts/0    S+   01:47   0:00 grep --color=auto apache

我尝试 sudo chown -R ec2-user / var / www / html 但是stll上传失败。

请帮忙。相同的PHP上传代码适用于其他共享主机提供商。这个php文件被Jquery Ajax调用。

2 个答案:

答案 0 :(得分:0)

我认为问题是$ dirPath.strtolower($ name)。

if (move_uploaded_file($_FILES['files']['tmp_name'][$i], $dirPath.strtolower($name))) {

众所周知,你必须写:strtolower($ dirPath。$ name)

if (move_uploaded_file($_FILES['files']['tmp_name'][$i], strtolower($dirPath . $name))) {

在所有其他代码中,您必须更改此内容!

答案 1 :(得分:0)

你好,我最近遇到的每个人都是我,我也是一个初学者,在短短3个小时内就解决了这个问题,这对我有帮助。我使用Linux AMI EC2实例。

问题可能全与文件夹的“可写性”有关(对不起,我不太熟悉这些术语,请多多包涵)文件夹的许可,也许只允许用于根目录

首先在实时服务中制作一个脚本,并包含以下代码以了解名称 将执行php的move_uploaded_file命令的客户端

<?php
echo exec('whoami');    
?>

然后结果是给我“ apache”作为客户的用户 在寻找文件夹之后,目的地检查它是否可以被客户端写入。 使用

ls -lh / var / www / folder /

然后您会看到 根和www就可以了 更改为

chown -R apache:apache /文件夹目标

请始终注意,用户是whoami php脚本的结果

希望这会有所帮助