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

时间:2019-01-30 07:32:14

标签: php perl

我找到了用于检索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”来提取值,而又不知道正确的树级体系结构?

1 个答案:

答案 0 :(得分:0)

对于要查找的节点,将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字符串。