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

问题描述 投票:0回答:3

我正在尝试使用 PHP 在 EC2 中上传 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);
    }

此代码在 if (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 但仍然上传失败。

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

php amazon-ec2
3个回答
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))) {

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


0
投票

大家好,我最近遇到了这个错误,我也是初学者,仅用了 3 个小时就解决了这个问题,这对我有帮助。我使用 Linux AMI EC2 实例。

问题可能全都与文件夹的“可写性”(抱歉,我不太熟悉术语,请耐心等待)权限有关,也许只允许根目录

首先在实时服务上创建一个脚本并包含此代码以了解名称是什么 将执行 php 的 move_uploaded_file 命令的客户端

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

然后结果给我“apache”作为我客户的用户 查找文件夹后,目标检查客户端是否可写 使用

ls -lh /var/www/文件夹/

然后你会看到像 root 和 www 就在上面 改为

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

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

希望这有帮助


0
投票

我遇到了同样的问题,对我有用的是:

move_uploaded_file($_FILES['files']['tmp_name'][$i], $dirWithinDocumentRoot);

我将文件移至/tmp目录:

move_uploaded_file($_FILES['files']['tmp_name'][$i], '/tmp/' . $_FILES['files']['name'][$i]);
© www.soinside.com 2019 - 2024. All rights reserved.