如何根据行的 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;
?>
我有一个从 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;
?>