Я разработал инструмент командной строки (CLT) на машине Amazon EC2 (Linux). Он основан на OpenCV, так что я могу выполнить свой скрипт и возможность писать изображения на сервере (по imwrite(std::string path, cv::Mat image)
).
Я делаю это именно из консоли, и он успешно пишет, но когда я пытаюсь вызвать его из PHP-скрипта (апаш пользователь), он может получить входной файл на PHP, перемещая его в одну конкретную папку, но когда я запускаю инструмент командной строки через exec($execQuery, $output, $return)
мой c ++ CLT не пишет ни одного изображения.
Код PHP:
move_uploaded_file($_FILES["file"]["tmp_name"],
"/var/www/html/public/saved/" . $_FILES["file"]["name"]);
$path = "/var/www/html/public/saved/" . $_FILES["file"]["name"];
$dest = "/var/www/html/public/saved/DEST_" . $_FILES["file"]["name"];
$execQuery = sprintf("/usr/local/bin/binary_test -source \"%s\" -dest \"%s\"", $path, $dest);
exec($execQuery, $output, $return); // this should execute my binary which writes an image
и saved
папка имеет как пользователь: ec2 пользователь и www как группа. Я пытался изменить это на апаш но я не получил никакого результата.
У кого-нибудь есть подсказка для этого?
Заранее большое спасибо. С уважением.
Редактировать:
$return
код 6.
Edit2:
если я применю sudo перед командой exec, код возврата 1. Иначе это 6
После нескольких часов отладки я получаю сообщение об ошибке в строке c ++, где я вызываю функцию:
CascadeClassifier::detectMultiScale
Я до сих пор не могу себе представить, почему.
Задача ещё не решена.
Других решений пока нет …