Php 如何根据行的id从文本文件中获取行?
我有一个从Php 如何根据行的id从文本文件中获取行?,php,file,sap,Php,File,Sap,我有一个从saplogon.ini文件读取的主机名。 现在,我将这个文件加载到一个数组中,比如说$lines 当我通过$hostname=$lines[10]读取主机名时; 我无法登录,但如果我将值硬编码为$line=“主机名”然后将其分配给hostname,$hostname=$line,则它可以正常工作 有谁能解决这个问题?要使程序动态,我需要从saplogon.ini读取此值,并使用explode获得所需的名称 以下是我的代码片段: $pieces = explode('=', $line
saplogon.ini
文件读取的主机名。
现在,我将这个文件加载到一个数组中,比如说$lines
当我通过$hostname=$lines[10]
读取主机名时;
我无法登录,但如果我将值硬编码为$line=“主机名”
然后将其分配给hostname,$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
不工作,虽然我试图做同样的事情,但添加了文件\u忽略\u新的\u行。我尝试了主机名的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=$line[0]代码>我的代码工作正常,因为它使用第一行的硬编码值$line=“Item5=cesderlpt03.vco.bpcoco”代码>
因此,根据项目的名称,我需要项目所在的行。例如,如果我选择了Item5
,我想检索.ini文件中文本Item5=cesderlpt03.vco.bpcoco
所在的行。如果你想用idItem5
捕获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的内容进行编辑。在我发布我的答案时,如果您使用更多的代码进行编辑,我可以清楚地看到您想要的是什么。编辑适用于您的整个代码,并解释您想要获得什么。如果您的代码有效,您想要什么?我的硬编码代码不适用于动态代码。我想使我的代码更灵活,这样,如果saplogon.ini发生更改,我就不必在以后添加值。@Adarsh您真的希望输出什么?我需要主机名才能使用rfc登录到SAP系统,但当我使用$lines[0]从saplogon.ini获取时;它拒绝我的输入,但接受与硬编码相同的值;saprfc_集合_代码_页面($sap,$l[“代码页面])$l是一个包含主机名、密码、客户端、用户名等的数组。@Adarsh您想在.ini文件中找到值cesderlpt03.vco.bpcoco?是的,找到了值,但saprfc_open拒绝了它,这就是我想知道的,为什么?它从第一行接受相同的硬编码值。@Adarsh请参阅我的编辑并尝试使用我的示例。您将看到作为输出的服务器名称,然后将代码放入您的代码中。如果您需要帮助,请留言