2015-05-25 2 views
1

У меня есть цель, как это в AntКак запустить PHP-сервер, запустить PHPUnit и остановить сервер PHP в 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 завершится (либо успешным, либо неудачным)?

ответ

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, но [этот вопрос] (http://stackoverflow.com/questions/25608908/stopping-in-built-php-server-on-mac-mavericks-livecode) может быть близок. – manouti

+0

Можем ли мы получить PID для порожденного 'exec'? –

Смежные вопросы