如何在给出双引号和单引号的情况下执行phing任务

时间:2013-01-10 08:43:35

标签: php execute phing

这是我希望执行的命令。

php -r "apc_clear_cache(); apc_clear_cache('user'); apc_clear_cache('opcode');"

这是我对phing的尝试

<exec command='php -r "apc_clear_cache(); apc_clear_cache(\'user\'); apc_clear_cache(\'opcode\');"' outputProperty="result" />

这就是我得到的

BUILD FAILED
Error reading project file [wrapped: /var/virtual/abc.com/build.xml:171:26: > required]
Total time: 0.2093 seconds

请告知。

更新

我通过编写一个名为RunApcClearCache.sh的运行

的bash脚本解决了我的问题
php -r "apc_clear_cache(); apc_clear_cache('user'); apc_clear_cache('opcode');"

然后使用./RunApcClearCache.sh

调用bash脚本

如果有更好的方法,我想听听。

我也不愿意为一件如此简单的事情写一项任务。当然必须有一种方法可以在exectask中正确地转义双引号。

4 个答案:

答案 0 :(得分:5)

Phing需要有效的XML。 在有效的XML中,您不能直接在属性中使用。

你需要逃避它/使用它的等效实体。 有五个预定义的实体:

&lt; represents "<"
&gt; represents ">"
&amp; represents "&"
&apos; represents '
&quot; represents "

尝试使用实体而不是字符。 因此,在命令属性...

中使用&quot;而不是"

https://en.wikipedia.org/wiki/XML#Escaping

答案 1 :(得分:0)

试试这个:

<exec command="php -r 'apc_clear_cache(); apc_clear_cache(\'user\'); apc_clear_cache(\'opcode\');'" outputProperty="result" />

不确定是否有效

答案 2 :(得分:0)

我会创建一个新任务并在那里执行php代码。 你也可以写一个新的php文件并用php执行这个。

答案 3 :(得分:0)

我遇到了同样的问题。为了避免shell脚本,我定义了一个adhoc任务,它映射相应的框架函数,例如

<adhoc-task name="fileHelper"><![CDATA[
  class FileHelper extends Task {

      private $lib = null;
      private $task = null;
      private $stub = null;

      function setTask($task) {
          $this->task = $task;
      }

      function setStub($stub) {
          $this->stub = $stub;
      }

      function setLib($lib) {
          $this->lib = $lib;
      } 

      function main() {
        $task = $this->task;
    $this->$task();
      }

      function generatePharStub() {
        include_once $this->lib . '/FileHelper.php'; 
        HTMLBuilder\FileHelper::generatePharStub($this->stub);
      }

      function generateIncludes() {
        include_once $this->lib . '/FileHelper.php'; 
        HTMLBuilder\FileHelper::generateIncludelist();
      }
  }
]]></adhoc-task>

可以通过以下方式调用:

  <fileHelper lib="${lib}" stub="${stub}" task="generateIncludes" />

在我的情况下,$ {lib}指向库目录。 $ {stub}是生成的phar存根文件。