Ошибка class.upload.php в капле CentOS 7.6 LEMP
Короче говоря:
Я размещал свое приложение MVC PHP в Amazon Web Services в экземпляре LEMP.
Затем я решил перейти в Digital Ocean, потому что их экземплярам не разрешено отправлять электронные письма.
Мое приложение в экземпляре AWS могло загружать фотографии, записывать в базу данных и взаимодействовать с внешним API.
Однако в Digital Ocean я не могу загружать фотографии с помощью class.upload.php. В /var/log/nginx/error.log это результат:
2020/05/18 03:28:17 [error] 10851#0: *174 FastCGI sent in stderr: "PHP message: PHP Notice: A non well formed numeric value encountered in /usr/share/nginx/html/admin/core/controller/class.upload.php on line 2667 PHP message: PHP Notice: A non well formed numeric value encountered in /usr/share/nginx/html/admin/core/controller/class.upload.php on line 2667" while reading response header from upstream, client: 181.115.109.228, server: _, request: "POST /admin/index.php?action=addproduct HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/www.sock:", host: "165.227.91.80", referrer: "http://165.227.91.80/admin/index.php?view=newproduct"
Вы могли бы подумать, что в class.upload.php в строке 2667 есть ошибка, однако это не так. Как я вам говорю, в AWS все работает так, как задумано./var/log/php-fpm/error.log
не показывает никаких ошибок. Это результат:
[18-May-2020 01:39:40] NOTICE: fpm is running, pid 10826
[18-May-2020 01:39:40] NOTICE: ready to handle connections
[18-May-2020 01:39:40] NOTICE: systemd monitor interval set to 10000ms
Каталог загрузки /usr/share/nginx/html/admin/storage
Я установил, что разрешения установлены на 777
. Что я делаю не так? Моя версия PHPPHP 7.3.18 (cli).
Это код PHP, который добавляет продукт в базу данных.
$product = new ProductData();
foreach ($_POST as $k => $v) {
if($k=="existence"){
if($v==""){
$product->existence=12;
}else{
$product->$k = $v;
}
}else{
$product->$k = $v;
}
}
$alphabeth = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ1234567890_-";
$code = "";
for ($i = 0;$i < 11;$i++) {
$code.= $alphabeth[rand(0, strlen($alphabeth) - 1) ];
}
$product->short_name = $code;
$handle = new Upload($_FILES['image']);
if ($handle->uploaded) {
$url = "storage/products/";
$handle->Process($url);
$product->image = $handle->file_dst_name;
}
if (isset($_POST["is_public"])) {
$product->is_public = 1;
} else {
$product->is_public = 0;
}
if (isset($_POST["in_existence"])) {
$product->in_existence = 1;
} else {
$product->in_existence = 0;
}
if (isset($_POST["is_featured"])) {
$product->is_featured = 1;
} else {
$product->is_featured = 0;
}
if (isset($_POST["doublePoints"])) {
$product->doublePoints = 1;
} else {
$product->doublePoints = 0;
}
// $product->name = $_POST["name"];
$product->add();
Core::redir("index.php?view=products");
1 ответ
SELinux был disabled
в экземпляре AWS и enforcing
в DigitalOcean. Мне просто пришлось отключить его, чтобы загружать файлы.