【发布时间】: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 文件中得到的最后几行