Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
Php 如何根据行的id从文本文件中获取行?_Php_File_Sap - Fatal编程技术网

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
所在的行。

如果你想用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的内容进行编辑。在我发布我的答案时,如果您使用更多的代码进行编辑,我可以清楚地看到您想要的是什么。编辑适用于您的整个代码,并解释您想要获得什么。如果您的代码有效,您想要什么?我的硬编码代码不适用于动态代码。我想使我的代码更灵活,这样,如果saplogon.ini发生更改,我就不必在以后添加值。@Adarsh您真的希望输出什么?我需要主机名才能使用rfc登录到SAP系统,但当我使用$lines[0]从saplogon.ini获取时;它拒绝我的输入,但接受与硬编码相同的值;saprfc_集合_代码_页面($sap,$l[“代码页面])$l是一个包含主机名、密码、客户端、用户名等的数组。@Adarsh您想在.ini文件中找到值cesderlpt03.vco.bpcoco?是的,找到了值,但saprfc_open拒绝了它,这就是我想知道的,为什么?它从第一行接受相同的硬编码值。@Adarsh请参阅我的编辑并尝试使用我的示例。您将看到作为输出的服务器名称,然后将代码放入您的代码中。如果您需要帮助,请留言