Хотя я не предлагаю использовать eval
для этого (это not решение), проблема в том, что eval
ожидает полные строки кода, а не только фрагменты.
$ma ="2+10";
$p = eval('return '.$ma.';');
print $p;
Должен делать то, что вы хотите.
Лучшим решением было бы написать токенизатор / парсер для вашего математического выражения. Вот простой пример, основанный на регулярном выражении, который дает вам пример:
$ma = "2+10";
if(preg_match('/(\d+)(?:\s*)([\+\-\*\/])(?:\s*)(\d+)/', $ma, $matches) !== FALSE){
$operator = $matches[2];
switch($operator){
case '+':
$p = $matches[1] + $matches[3];
break;
case '-':
$p = $matches[1] - $matches[3];
break;
case '*':
$p = $matches[1] * $matches[3];
break;
case '/':
$p = $matches[1] / $matches[3];
break;
}
echo $p;
}
Вот мой рабочий файл systemd:
[Unit]
Description=Python app
# Requirements
Requires=network.target
# Dependency ordering
After=network.target
[Service]
# Let processes take awhile to start up
TimeoutStartSec=0
RestartSec=10
Restart=always
Environment="APP_SITE_SETTINGS=/home/app/.config/settings.cfg"
Environment="PYTHONPATH=/home/app/.local/lib/python3.6/site-packages"
WorkingDirectory=/home/app/app-site
User=app
Group=app
PermissionsStartOnly=true
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all
# Main process
ExecStartPre=/bin/mkdir -p /run/app
ExecStartPre=/bin/chown app:app /run/app
#ExecStartPre=source scl_source enable rh-python36
ExecStart=/usr/bin/scl enable rh-python36 -- /home/app/.local/bin/pipenv run uwsgi \
--socket 127.0.0.1:6003 \
--buffer-size 65535 \
--enable-threads \
--single-interpreter \
--threads 1 \
-L \
--stats /run/app/uwsgi_stats.socket \
--lazy-apps \
--master-fifo /run/stocks/uwsgimasterfifo \
--processes 1 \
--harakiri 960 \
--max-worker-lifetime=21600 \
--ignore-sigpipe \
--ignore-write-errors \
--disable-write-exception \
--mount /=run:app \
--manage-script-name
[Install]
WantedBy=multi-user.target