【问题标题】:Can't import a file on prod (Symfony 3.4)无法在 prod 上导入文件(Symfony 3.4)
【发布时间】:2020-02-19 11:38:48
【问题描述】:

我在 prod 上配置一个网站,我需要在其中导入一个文件。

所以我有一个带有表单的页面,要求我导入文件,并且在开发中它可以工作。 现在的问题是,在 prod 环境中,当我提交表单时,我收到一个错误 500,如下所示:

我该如何解决这个问题?

编辑:

这是我在日志文件中找到的行:

[2020-02-19 13:26:53] request.CRITICAL: Uncaught PHP Exception Symfony\Component\HttpFoundation\File\Exception\FileException: "Unable to write in the "csv/" directory" at /var/www/html/******/vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/File/File.php line 115 {"exception":"[object] (Symfony\\Component\\HttpFoundation\\File\\Exception\\FileException(code: 0): Unable to write in the \"csv/\" directory at /var/www/html/******/vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/File/File.php:115)"} []
[2020-02-19 13:26:53] cache.WARNING: Failed to save key "%5BSymfony%5CBundle%5CTwigBundle%5CController%5CExceptionController%5D%5B1%5D" (array) {"key":"%5BSymfony%5CBundle%5CTwigBundle%5CController%5CExceptionController%5D%5B1%5D","type":"array","exception":"[object] (ErrorException(code: 0): file_put_contents(/var/www/html/******/var/cache/prod/pools/kdBlscBHv1/5e4d379d6cc116.53694267): failed to open stream: Permission denied at /var/www/html/******/vendor/symfony/symfony/src/Symfony/Component/Cache/Traits/FilesystemCommonTrait.php:87)"} []

这是我在文件提交和批准时使用的功能(很少的有效性测试):

private function uploadCsvFile($file)
    {
        $ext = "csv";
        $originalFilename = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
        
        $safeFilename = transliterator_transliterate('Any-Latin; Latin-ASCII; [^A-Za-z0-9_] remove; Lower()', $originalFilename);
        $newFilename = $safeFilename.'-'.uniqid().'.'.$ext;
        // Move the file to the directory where csv files are stored
        try 
        {
            $directory = 'csv/';
            $file->move($directory, $newFilename);
            return $directory.$newFilename;
        } 
        catch (FileException $e) 
        {
            return false;
        }
    }

编辑 2:

我设法解决了它。我必须向文件夹中的每个人授予写入权限(我使用了这个命令:chmod 777 my_folder

【问题讨论】:

  • 请检查您服务器上的错误日志。发生这种情况时应该有某种严重错误。您是否尝试过在本地机器上运行 prod-environment?
  • 我试过了,但没有找到任何帮助我的东西
  • 在其中搜索php.CRITICAL 或“致命”(如致命错误)或“异常”等常用词。如果您在其中看不到任何东西,我们将无法帮助您。您必须收到某种错误消息,或者能够在您的开发环境中本地重现该问题。 500 internal server error 只是一个非常笼统的描述,即问题发生在服务器端,即在您的 PHP 代码中的某个地方。
  • 很抱歉一直打扰您,但代码本身还不够。我们不知道错误是否发生在那里或其他地方。即使它发生在该操作中,也可能是触发错误的任何函数调用,例如try catch 没有捕捉到正确的异常怎么办? pathinfo() 可能会返回错误的值(不是字符串),从而导致后续代码失败。等等。如果没有适当的错误消息和/或堆栈跟踪,我们真的无法判断是什么导致了这里的错误。
  • 现在你可以看到我在 prod.log 文件中得到的最后几行

标签: apache symfony


【解决方案1】:

我唯一的想法是您应该确保服务器有权写入 csv 目录,如果 DEV 环境正在工作,请检查 csv 的所有者是 www-data 还是调用默认的 apache 用户在您的服务器操作系统上被调用。您应该确保设置读/写权限

【讨论】:

    猜你喜欢
    • 2018-09-23
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多