Как запустить сервер PHP, запустить PHPUnit и остановить сервер PHP в Ant?

1

У меня есть такая цель в Ant

<target name="test">
    <exec executable="php" failonerror="true">
        <arg value="-S"/>
        <arg value="localhost:80"/>
        <arg value="-t"/>
        <arg value="web"/>
    </exec>
    <exec executable="phpunit" failonerror="true">
        <arg value="tests"/>
    </exec>
</target>

Проблема заключается в том, когда я запускаю это, цель будет блокироваться из-за встроенного сервера PHP. Как запустить PHP-сервер, а затем запустить модуль PHP, а затем остановить сервер, когда блок PHP завершится (либо успешным, либо неудачным)?

Теги:
ant
phpunit

2 ответа

1
Лучший ответ

Наконец-то я получил какое-то рабочее решение. Чтобы получить PID сервера PHP, мне нужно выполнить команду ps а затем выполнить регулярное выражение, чтобы получить PID, а затем убить сервер.

<project name="myapp" default="test" basedir=".">
    <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="ant-contrib.jar" />
    <target name="start-server">
        <echo>Starting PHP server</echo>
        <exec executable="php" spawn="true">
            <arg value="-S"/>
            <arg value="localhost:8080"/>
            <arg value="-t"/>
            <arg value="${basedir}"/>
        </exec>
        <sleep seconds="1"/>
    </target>
    <target name="stop-server">
        <!-- Getting the PHP server PID -->
        <exec executable="ps">
            <arg value="ax"/>
            <redirector outputproperty="php.ps">
                <outputfilterchain>
                    <linecontains>
                        <contains value="php"/>
                        <contains value="localhost:8080"/>
                    </linecontains>
                </outputfilterchain>
            </redirector>
        </exec>
        <propertyregex property="php.pid" input="${php.ps}" regexp="^\s+(\d+)" select="\1"/>
        <echo>Killing PHP server at ${php.pid}</echo>
        <exec executable="kill">
            <arg value="${php.pid}"/>
        </exec>
    </target>
    <target name="test">
        <antcall target="start-server"></antcall>
        <echo>Starting test</echo>
        <sleep seconds="3"/>
        <echo>Finishing test</echo>
        <antcall target="stop-server"></antcall>
    </target>
</project>
2

Если вы хотите, чтобы Ant запускал php процесс, вы можете установить spawn="true" в вызове задачи:

<exec executable="php" failonerror="true" spawn="true">
    <arg value="-S"/>
    <arg value="localhost:80"/>
    <arg value="-t"/>
    <arg value="web"/>
</exec>

Заметка о его использовании из документации:

Если вы создадите команду, ее выход не будет регистрироваться ant. Параметры ввода, вывода, ошибки и свойств результата неактивны при возникновении процесса.

  • 0
    и как остановить это, когда следующая команда заканчивается?
  • 0
    @PetraBarus Не эксперт по PHP, но этот вопрос может быть близким.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню