4

这是我希望执行的命令。

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');"

然后使用调用bash脚本./RunApcClearCache.sh

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

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

4

4 回答 4

6

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

您需要转义它/使用它的等效实体。有五个预定义的实体:

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

尝试使用实体而不是字符。所以在命令属性中使用&quot;而不是......"

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

于 2015-08-11T10:41:52.107 回答
0

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

<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 存根文件。

于 2013-01-27T21:41:08.577 回答
0

我将创建一个新任务并在那里执行 php 代码。您还可以编写一个新的 php 文件并使用 php.ini 执行该文件。

于 2013-01-10T09:51:23.750 回答
0

尝试这个:

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

不确定它是否有效

于 2013-01-10T09:06:14.133 回答