У меня есть сайт для моих студентов, и он работает на Ubuntu 14.04. Когда мои студенты регистрируются на моем сайте, я сохраняю информацию о пользователях в базе данных MySQL.
Я хотел бы предоставить своим студентам веб-сайт на моей установке Ubuntu при регистрации на моем сайте, и я хотел бы, чтобы это было автоматизировано. Мой вопрос - Могу ли я как-то использовать данные напрямую из базы данных MySQL, чтобы предоставить им поддомен (username.mydoamin.com) на моем Ubuntu или я могу выполнять команды оболочки на Ubuntu из PHP и автоматизировать то, что я делаю вручную сейчас?
решение1
Могу ли я выполнять команды оболочки в Ubuntu из PHP и автоматизировать то, что я сейчас делаю вручную?
Вы можете запускать команды оболочки изнутри, PHP
используяshell_exec()
функция или использование ` `
оператора (обратная кавычка): если вы используете версию PHP
< 5.4.0, сначала убедитесь, что вы отключилибезопасный режим, то в своем PHP
скрипте вы можете использовать любой из этих синтаксисов:
$return = shell_exec('<shell_command>');
$return = `<shell_command>`;
Если вы не хотите захватывать возвращаемые значения из отдельных команд, наиболее простым способом сделать то, о чем вы просите, будет сжать все, что вы делаете вручную в оболочке, в автономный bash
(или какой-либо другой) скрипт, который будет вызываться один раз с использованием любого из этих методов. Например, синтаксис для bash
скрипта будет следующим:
$return = shell_exec('bash script.sh');
$return = `bash script.sh`;
Чтобы передать параметры скрипту (например, значение переменной $username
):
$return = shell_exec("bash script.sh '$username'");
$return = `bash script.sh '$username'`;
Чтобы получить переданные параметры в bash
скрипте (например, значение $username
переменной, переданной с помощью метода выше):
#!/bin/bash
# ...
username=$1
# ...
Или просто сделайте ссылку $1
там, где это необходимо, например:
#!/bin/bash
# ...
echo "$1"
# ...
решение2
В продолжение моего собственного вопроса я расскажу о своем опыте. Я заставил Shell-исполнение работать из PHP, но у меня возникли серьезные проблемы с безопасностью решения. Это была КРУПНАЯ ошибка с моей стороны, что я не увидел этого в начале.
Чтобы устранить риски безопасности, я создал bash-скрипт, который искал активированных пользователей в таблице пользователей. Если пользователь был активен И не был пользователем Linux, то пользователь должен быть создан на моем Linux, создается пользователь базы данных, создается поддомен и ssh блокируется для пользователя. Я настроил cron-задание, которое выполняется каждые 60 минут, и после создания пользователя пользователю отправляется электронное письмо с регистрационной информацией.
Это устраняет множество рисков безопасности (но не все).
Бьярке