PHP的proc_open手册说明:
文件描述符编号不限于0,1和2 - 您可以指定任何有效的文件描述符编号,并将其传递给子进程.这允许您的脚本与作为"协同进程"运行的其他脚本进行互操作.特别是,这对于以更安全的方式将密码短语传递给PGP,GPG和openssl等程序非常有用.它对于读取这些程序在辅助文件描述符上提供的状态信息也很有用.
发生了什么: 我在基于PHP的Web应用程序中调用Perl脚本并在调用中传递参数.我将来不需要将数据发送到脚本.通过stdout [1]我收到了我在PHP应用程序中使用的Perl脚本json_encoded数据.
我想补充的内容: Perl脚本正在通过网站收集信息,具体取决于其初始调用中传递的参数.我想将一个文本字符串发送回PHP应用程序,我可以将其用作一种进度条显示.
我认为我应该这样做:我希望(每1-2秒)轮询一次为"进展"更新设置的频道.我会使用Javascript/jQuery写入一个html div容器供用户查看.我不认为我应该将"进度"通道与更关键的"json_encode(数据)"通道混合,因为我需要解密stdout流.(这个想法合乎逻辑,实用吗?)
我的主要问题: 你如何使用额外的"文件描述符?" 我想将其他通道的设置想象得很简单,比如下面的3 => ...:
$tunnels = array(
0 => array('pipe', 'r'),
1 => array('pipe', 'w'),
2 => array('pipe', 'w'),
3 => array('pipe', 'w')
);
$io = array();
$resource = proc_open("perl file/tomy/perl/code.pl $param1 $param2 $param3", $tunnels, $io);
if(!is_resource($resource)) {
$error = "No Resource";
}
fclose($io[0]);
$perlOutput = stream_get_contents($io[1]);
$output = json_decode($perlOutput);
$errors = stream_get_contents($io[2]);
print "$errors<p>";
fclose($io[1]);
fclose($io[2]);
$result = …Run Code Online (Sandbox Code Playgroud) 这个问题已被重新定义.我正在使用CPAN Perl模块WWW :: Mechanize来浏览网站,使用HTML :: TreeBuilder-XPath来捕获内容,使用xacobeo来测试HTML/XML上的XPath代码.目标是从基于PHP的网站调用此Perl脚本,并将已删除的内容上载到数据库中.因此,如果内容"缺失",仍然需要考虑.
下面是一个经过测试的简化示例代码,描述了我的挑战.注意:
ITEMS不同商店的各种输出; Products*每个商店都有不同数量的商品.这些产品清单可能有也可能没有下面的逐项表.下面,示例xml每个商店更改(如上所述),但为了简洁起见,我只显示一个"类型"的输出.我意识到所有数据都可以捕获到一个数组中,然后使用正则表达式来解密内容,以便将其上传到数据库中.我正在寻求更好的XPath知识,以帮助简化此(和未来)解决方案.
<!DOCTYPE XHTML>
<table id="8jd9c_ITEMS">
<tr><th style="color:red">The Products we have in stock!</th></tr>
<tr><td><span id="Product_NUTS">We have nuts!</span></td></tr>
<tr><td>
<!--Table may or may not exist -->
<table>
<tr><td style="color:blue;text-indent:10px">Almonds</td></tr>
<tr><td style="color:blue;text-indent:10px">Cashews</td></tr>
<tr></tr>
</table>
</td></tr>
<tr><td><span id="Product_VEGGIES">We have veggies!</span></td></tr>
<tr><td>
<!--Table may or may not exist -->
<table>
<tr><td style="color:blue;text-indent:10px">Carrots</td></tr>
<tr><td style="color:blue;text-indent:10px">Celery</td></tr>
<tr></tr>
</table>
</td></tr>
<tr><td><span id="Product_ALCOHOL">We have booze!</span></td></tr>
<!--In this case, the table …Run Code Online (Sandbox Code Playgroud) 例如:
<input id="wineId" name="id" type="text" value="<%= id %>" />
Run Code Online (Sandbox Code Playgroud)
我知道它正在打印JSON字符串id属性的值(即{id:100}).但是我没有找到任何关于它的文档,甚至我的Google-Fu都找不到它. 这个SO帖子假设它是一个Microsoft Response.write()方法,但我发现它在与Microsoft代码无关的上下文中.
我正在阅读关于backbone.js的一般信息,Christophe Coenraets专门针对此特定页面(第4行)的这个由四部分组成的骨干教程.
我在html和javascript文档下搜索了"developer.mozilla.org"网站.我瞎了吗?任何帮助非常感谢!
我有一个替换命令,可以捕获并显示替换字符串中的 submatch() 值。但我想在这一行下面解析另一行信息。该行始终是空行之后的第一行,尽管该空行的行数有所不同。例如:
The first important line I want to capture is here
Stuff I don't want.
A few more lines of stuff I don't want...
Second line I want to capture.
Run Code Online (Sandbox Code Playgroud)
这种模式在文档中重复一百次左右。我可以很好地替换“第一条重要行”,但是该搜索模式不应该包含一种跳到第一个空行,然后选择下一个“我想要捕获的第二行”的方法。?? 然后,我可以将第二行的内容放入子匹配括号中,并在需要的地方替换它们(对吗?)。
如果是这样,我无法找到扩展第一个搜索模式以捕获“第二行”的方法建议或纠正我的方法将不胜感激。
一个多行文档有一个标题/标题部分,然后每个下面有大约10个列表.我需要将标题/标题信息放入每个列表中,以便它们可以正确上传到网站(使用逗号和管道分隔符).它看起来像这样:
SectionName1 and TitleName1
1111 - The SubSectionName A
222 - The SubSectionName B
3333 - The SubSectionName C
SectionName2 and TitleName2
444 - The SubSectionName D
55555 - The SubSectionName E
66 - The SubSectionName F
Run Code Online (Sandbox Code Playgroud)
重复几百次.我需要的是产生类似的东西:
SectionName1,TitleName1,1111,SubSectionNameA
SectionName1,TitleName1,222,SubSectionNameB
SectionName1,TitleName1,3333,SubSectionNameC
SectionName2,TitleName2,444,SubSectionNameD
SectionName2,TitleName2,55555,SubSectionNameE
SectionName2,TitleName2,66,SubSectionNameF
Run Code Online (Sandbox Code Playgroud)
我意识到这个解决方案有多种方法,但是我很难在任何一种方法上触发触发器.我理解子匹配,连接和getline但我不擅长在这种情况下实际使用它们.
任何让我精神上开始的帮助将不胜感激.
perl ×2
substitution ×2
vim ×2
backbone.js ×1
html ×1
html5 ×1
javascript ×1
php ×1
proc-open ×1
regex ×1
xpath ×1