这是我希望执行的命令。
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
的运行
php -r "apc_clear_cache(); apc_clear_cache('user'); apc_clear_cache('opcode');"
然后使用./RunApcClearCache.sh
如果有更好的方法,我想听听。
我也不愿意为一件如此简单的事情写一项任务。当然必须有一种方法可以在exectask中正确地转义双引号。
答案 0 :(得分:5)
Phing需要有效的XML。 在有效的XML中,您不能直接在属性中使用。
你需要逃避它/使用它的等效实体。 有五个预定义的实体:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
尝试使用实体而不是字符。 因此,在命令属性...
中使用"
而不是"
答案 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存根文件。