【问题标题】:How obtain a line from a text file based in the id of the line? [closed]如何根据行的id从文本文件中获取一行? [关闭]
【发布时间】:2015-03-16 04:16:02
【问题描述】:

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

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

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

这是我的代码的 sn-p:

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

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

这是我的 saplogon.ini sn-p

[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,我想检索文本 Item5=cesderlpt03.vco.bpcoco 所在的 .ini 文件行。

【问题讨论】:

  • 使用 saplogon.ini 的内容进行编辑
  • 我发布了我的答案,如果您使用更多代码进行编辑,我可以确切地看到您想要做什么
  • 使用适合您的整个代码进行编辑并说明您想要获得什么
  • 如果你的代码工作你想要什么?
  • 我的硬编码代码不是动态代码。我想让我的代码更灵活,这样如果 saplogon.ini 发生更改,我就不必在以后添加值。

标签: php file sap


【解决方案1】:

如果你想用 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; 

?>

【讨论】:

  • @Adarsh 你真的想要什么输出?
  • 我需要主机名才能使用 rfc 登录 SAP 系统,但是当我使用 $lines[0] 东西从 saplogon.ini 中获取它时;它拒绝我的输入,但接受与硬编码相同的值。这里是 SAP 代码的登录:$sap = @saprfc_open ($l); saprfc_set_code_page ($sap,$l["CODEPAGE"]); $l 是一个包含主机名、密码、客户端、用户名等的数组。
  • @Adarsh 你想在 .ini 文件中找到值 cesderlpt03.vco.bpcoco?
  • 是的,找到值但 saprfc_open 拒绝它,这就是我想知道的,为什么?它从第一行接受相同的硬编码值。
  • @Adarsh 查看我的编辑并尝试使用我的示例,您将看到服务器的名称作为输出,然后将代码放入您的代码中。如果您需要帮助,请发表评论
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
相关资源
最近更新 更多