Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转换为sh+;perl脚本到php脚本_Php_Perl - Fatal编程技术网

转换为sh+;perl脚本到php脚本

转换为sh+;perl脚本到php脚本,php,perl,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) { prin

我找到了一个用于检索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
问题是“X509Certificate”在XML中的其他块中,所以我必须为每个块创建一个循环。是否有一种方法可以仅通过element name=“X509Certificate”提取值,而不知道正确的树结构?

对于您要查找的节点,使用带有a的方法:

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

#没有名称空间前缀的元素的默认名称空间
$xmlDoc->registerXPathNamespace('default','http://uri.etsi.org/02231/v2#');
foreach($xmlDoc->xpath(//默认值:X509Certificate)作为$element){

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

您发布的内容不是问题,而是要求某人完成您的工作。尝试从那里开始。为什么不正确地执行此操作并使用XML解析器?
curl--silenthttps://applicazioni.cnipa.gov.it/TSL/_IT_TSL_signed.xml | perl-MXML::LibXML-e'@nodes=XML::LibXML->load\u XML(IO=>\*STDIN)->getElementsByTagName(“X509Certificate”);打印“----开始证书-----\n”,加入(“\n”,$nodes[0]->文本内容=~/(.0,64})/g),“----结束证书-----\n”;“
我已经用一个部分解决方案进行了更新。但是我不知道如何对它进行组合。如果有一种方法只根据元素的名称检索元素。顺便说一句,正确的url是:@StefanBecker hi,我想使用纯PHP,因为脚本可以在windows或linux系统上运行。因此perl不能在无法安装3'party softwa的托管windows服务器上执行重新
$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);