在Linux中使用php';s执行函数
我必须比较两个xml文件,并使用php和Linux的diff命令生成一个补丁。这是我的密码:在Linux中使用php';s执行函数,php,linux,diff,compare,exec,Php,Linux,Diff,Compare,Exec,我必须比较两个xml文件,并使用php和Linux的diff命令生成一个补丁。这是我的密码: <?php // script file location: /var/local/out/upload.php // ... // $templateName file location: /var/local/out/upload/example_word_template/word/document.xml // $filename file location: /var/local/o
<?php
// script file location: /var/local/out/upload.php
// ...
// $templateName file location: /var/local/out/upload/example_word_template/word/document.xml
// $filename file location: /var/local/out/upload/example_word/word/document.xml
// $templateName value: upload/example_word_template/word/document.xml
// $filename value: upload/example_word/word/document.xml
$command = "diff /var/local/out/$templateName /var/local/out/$filename > /var/local/out/patch.patch";
exec($command);
echo($command);
?>
浏览器输出:
diff/var/local/out/upload/example\u word\u template/word/document.xml/var/local/out/upload/example\u word/word/document.xml>/var/local/out/patch.patch
如果我复制并粘贴输出,并直接在Linux中执行它,它就可以正常运行。但是脚本本身不会生成补丁文件。有什么问题吗?PHP提供了一个您可能想尝试的解决方案
手册中的示例
请注意,diff仅在语法层面上,而在语义上,两者之间没有区别
<element foo="foo" bar="bar"/>
及
PHP提供了一个您可能想尝试的解决方案
手册中的示例
请注意,diff仅在语法层面上,而在语义上,两者之间没有区别
<element foo="foo" bar="bar"/>
及
尝试检查已执行命令的输出,可能运行apache的用户没有在该文件夹或其他文件夹中写入的权限…:
$output=array();$status=0;
exec($command,$output,$status);
var_dump($output);var_dump($status);
尝试检查已执行命令的输出,可能运行apache的用户没有在该文件夹或其他地方写入的权限…:
$output=array();$status=0;
exec($command,$output,$status);
var_dump($output);var_dump($status);
您希望像这样捕获输出
$command = "diff /var/local/out/$templateName /var/local/out/$filename > /var/local/out/patch.patch";
exec($command, $output);
var_dump($output);
echo join("\n", $output);
你可以像这样重新组合这些线
$command = "diff /var/local/out/$templateName /var/local/out/$filename > /var/local/out/patch.patch";
exec($command, $output);
var_dump($output);
echo join("\n", $output);
您希望像这样捕获输出
$command = "diff /var/local/out/$templateName /var/local/out/$filename > /var/local/out/patch.patch";
exec($command, $output);
var_dump($output);
echo join("\n", $output);
你可以像这样重新组合这些线
$command = "diff /var/local/out/$templateName /var/local/out/$filename > /var/local/out/patch.patch";
exec($command, $output);
var_dump($output);
echo join("\n", $output);
输出为“array(0){}int(1)”,我认为这是不允许的操作:)目标目录不存在,不可写,或者“diff”程序找不到/不可执行。@symcbean不能是“diff”程序找不到/不可执行”。因为他说它在控制台中工作@wilsonsilva在执行命令之前,您是否尝试过手动创建输出文件?类似于
文件内容('/var/local/out/patch.patch','');chmod('/var/local/out/patch.patch',0777)代码>?不是真的..它应该已经创建了文件:)为了进行测试,请尝试将/var/local/out上的权限从命令行更改为0777,然后重试:)输出是“array(0){}int(1)”我认为它的操作是不允许的:)目标目录不存在,不可写或“diff”程序找不到/不可执行。@symcbean不能是“diff”程序找不到/不可执行”。因为他说它在控制台中工作@wilsonsilva在执行命令之前,您是否尝试过手动创建输出文件?类似于文件内容('/var/local/out/patch.patch','');chmod('/var/local/out/patch.patch',0777)代码>?不是真的..它应该已经创建了文件:)为了测试,请尝试从命令行将/var/local/out上的权限更改为0777,然后重试:)输出是“array(0){}”,我不知道它是什么意思。“我还是个Linux新手。@wilsonsilva在你的另一条评论中,你说返回的状态是1
。这意味着有一个错误。您的路径是否指向存在的文件?是。如果我在linux中直接执行以下命令:“diff/var/local/out/upload/example\u word\u template/word/document.xml/var/local/out/upload/example\u word/word/document.xml>/var/local/out/patch.patch”将创建patch.patch文件。@wilsonsilva是否将该文件读入PHP?尝试使用file\u get\u contents()
。我无法读取它,因为如果使用php脚本,则不会创建该文件。输出为“array(0){}”,我不知道它是什么意思。“我还是个Linux新手。@wilsonsilva在你的另一条评论中,你说返回的状态是1
。这意味着有一个错误。您的路径是否指向存在的文件?是。如果我在linux中直接执行以下命令:“diff/var/local/out/upload/example\u word\u template/word/document.xml/var/local/out/upload/example\u word/word/document.xml>/var/local/out/patch.patch”将创建patch.patch文件。@wilsonsilva是否将该文件读入PHP?尝试使用file\u get\u contents()
。我无法读取它,因为如果我使用php脚本,则不会创建该文件。