如何根据行的 id 从文本文件中获取一行?

How obtain a line from a text file based in the id of the line?

我有一个从 saplogon.ini 文件中读取的主机名。 现在,我将这个文件加载到一个数组中,比如 $lines

当我通过$hostname = $lines[10]读取主机名时; 我无法登录,但如果我将值硬编码为 $line = "host name";,然后将其分配给主机名 $hostname = $line,则它可以正常工作。

任何机构对此有任何解决方案吗?为了使我的程序动态化,我需要从 saplogon.ini 中读取此值并使用 explode 来获取所需的名称。

这是我的代码片段:

$pieces = explode('=', $line, 2);
elseif(!isset($ASHOST))   $ASHOST = $pieces[1];
elseif(!isset($SYSNO)) $SYSNO = $pieces[1];

有趣的是它不会对 $SYSNO 造成任何问题,尽管我用同样的逻辑得到它。

这是我的 saplogon.ini 片段

[Server]
Item1=cesdsbop01.vco.bpcoco
Item2=192.168.1.198
Item3=cesapplpt1
Item4=cesderlpt01.vco.bpcoco
Item5=cesderlpt03.vco.bpcoco
Item5=00
Item6=cesperlpt01.vco.bpcoco
Item7=cesqerlpt01.vco.bpcoco
Item8=cesderlpt02.vco.bpcoco
Item9=cespilpt.vco.bpcoco


[Database]
Item1=00
Item2=01
Item3=00
Item4=00
Item5=00
Item6=00
Item7=00
Item8=00
Item9=01

不起作用,虽然我试图做同样的事情,但也添加了 FILE_IGNORE_NEW_LINES。我尝试了主机名的 IP 地址,同样的事情。抱歉,我不知道如何格式化下面的代码。

$line = "Item5=cesderlpt03.vco.bpcoco";
$CLIENT = "210";
$system = "Item5";
$a["USER"] = "Adarsh";
$handle = "saplogon.ini";
$lines = file($handle, FILE_IGNORE_NEW_LINES);
$line = $lines[0];
echo $lines[0];
$pieces = explode('=', $line, 2);
if(!isset($ASHOST))  { $ASHOST = $pieces[1];}
$line = $lines[1];
$pieces = explode('=', $lines[1], 2);
if(!isset($SYSNO)){ $SYSNO = $pieces[1];}

function sap_login($ASHOST, $SYSNO, $CLIENT, $USER)
{
$l["ASHOST"] = $ASHOST; //"cesderpap03.uhi.amerco";
$l["SYSNR"] = $SYSNO;
$l["CLIENT"] = $CLIENT;
$l["USER"] = $USER;
$l["PASSWD"] = "adarsh123";
if (isset($GWHOST))     $l["GWHOST"] = $GWHOST;              //             
if (isset($GWSERV))             $l["GWSERV"] =  $GWSERV;
$l["MSHOST"] = "";
$l["R3NAME"] = "ECD";
$l["GROUP"] = "";
$l["LANG"] = "EN";
$l["TRACE"] = "";       //if (isset($TRACE))        $TRACE;                   
$l["LCHECK"] = "";      //if (isset($LCHECK))       $LCHECK;                    
$l["CODEPAGE"] = "1160";    //if (isset($CODEPAGE))     $CODEPAGE;


$sap = @saprfc_open ($l);
saprfc_set_code_page ($sap,$l["CODEPAGE"]);
if(! $sap)
{
echo saprfc_error($sap);
}
else {echo "connected";}
}
sap_login(&$ASHOST, &$SYSNO, &$CLIENT, &$a["USER"])
?>

此代码让我登录到 SAP。这就是我想要实现的目标。如果我不选择这样做,$line = $lines[0]; 我的代码工作正常,因为它使用第一行的硬编码值 $line = "Item5=cesderlpt03.vco.bpcoco";

因此,根据项目名称,我需要放置项目的行。例如,如果我选择 Item5,我想检索我的 .ini 文件中文本 Item5=cesderlpt03.vco.bpcoco 所在的行。

如果你想使用 ID Item5 捕获 cesderlpt03.vco.bpcoco,你可以使用以下代码:

<?php

function array_find($needle, $haystack)
{
   foreach ($haystack as $item)
   {
      if (strpos($item, $needle) !== FALSE)
      {
         return $item;
         break;
      }
   }
}

$handle = "saplogon.ini";
$system = "Item5";

$lines = file($handle, FILE_IGNORE_NEW_LINES);

$line = array_find($system, $lines);

echo $line; 

?>