Один из вариантов - использовать bash
arr=(a b c)
x=$(IFS=,;printf "%s" "${arr[*]}")
echo "$x"
a,b,c
Альтернативно
arr=(a b c)
printf -v x "%s," "${arr[@]}"
x=${x%,}
echo "$x"
a,b,c
Во втором варианте вы можете установить разделитель на ,
(запятая, за которой следует пробел) вместо ,
только
printf -v x "%s, " "${arr[@]}"
x=${x%, }
echo "$x"
a, b, c
Это похоже на непонимание того, как работает sudo. Просто добавление чего-либо в файл sudoers не приведет к фактическому изменению разрешений для файлов, файл должен быть запущен как :sudo php /var/www/html/myprogram/writefile.php под «именем пользователя». также могут возникнуть проблемы с SELinux, поскольку запуск из файла из этого местоположения может быть запрещен в зависимости от его настройки.
После нескольких попыток, а также прочтения ряда статей по теме. Наконец-то я понимаю, что проблема в той аранжировке, которую я сделал. Надеюсь, это поможет другим пользователям, которые не знакомы с sudo
n visudo
.
Проблемы:
1. Имя пользователя
Что касается username
, пользователь, которого я добавил, имеет доступ к входу в систему через терминал. Хотя доступ к приложению осуществляется через веб-сайт. Таким образом, пользователь должен быть www-data
, выглядит как:
www-data ALL=(root) NOPASSWD: /usr/bin/php /var/www/html/myprogram/writefile.php
2. Не использовать exec или оболочку _exec
Я забыл, что к writefile.php
нельзя напрямую обращаться через браузер. Необходимо пройти через другой файл (index.php
), а затем в файле необходимо использовать shell_exec
или exec
для выполнения writefile.php
с помощью команды sudo
. Структура выглядит так:
index.php
<?php
exec("sudo /usr/bin/php /var/www/html/myprogram/writefile.php");
?>
writefile.php
<?php
echo file_put_contents("tes.txt","tes write file");
?>
Наконец-то открыл tes.txt
и работает нормально! Спасибо за все.