繁体   English   中英

将 sh+perl 脚本转换为 php 脚本

[英]Convert sh+perl script to php script

我找到了一个代码来检索 CA 证书。 问题是脚本是 .sh 格式:

wget -O - https://eidas.agid.gov.it/TL/TSL-IT.xml | perl -ne 'if (/<X509Certificate>/) {
s/^\s+//; s/\s+$//;
s/<\/*X509Certificate>//g;
print "-----BEGIN CERTIFICATE-----\n";
while (length($_)>64) {
print substr($_,0,64)."\n";
$_=substr($_,64);
}
print $_."\n";
print "-----END CERTIFICATE-----\n";
}' >CA.pem

我想在 PHP 上使用它,但我不知道它在 .sh 中是如何工作的(我使用的是 Windows 并且我无法在 .sh 中查看输出)所以我不知道如何开始转换:(

更新:经过一些尝试,我到达了这一点:

$xmlDoc = simplexml_load_file('https://eidas.agid.gov.it/TL/TSL-IT.xml');

$content = "";

foreach ($xmlDoc->SchemeInformation->PointersToOtherTSL->OtherTSLPointer->ServiceDigitalIdentities->ServiceDigitalIdentity as $key)
{
    $content .= "-----BEGIN CERTIFICATE-----" . PHP_EOL;
    $content .= wordwrap($key->DigitalId->X509Certificate, 64, PHP_EOL, true);
    $content .= PHP_EOL;
    $content .= "-----END CERTIFICATE-----" . PHP_EOL;

}

file_put_contents("test.txt",$content);

问题是“X509Certificate”在 XML 内的其他块中,所以我必须为每个块创建一个循环。 有没有办法只通过元素名称 = "X509Certificate" 提取值而不知道正确的树结构?

xpath()方法与您要查找的节点的XPath 结合使用:

编辑:为了安全起见,我添加了命名空间处理

# default namespace for elements without namespace prefix
$xmlDoc->registerXPathNamespace('default', 'http://uri.etsi.org/02231/v2#');

foreach ($xmlDoc->xpath("//default:X509Certificate") as $element) {

如果您将$element字符串化,您应该获得节点的文本内容,即您要查找的 Base64 字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM