PHP foreach over CSV忽略第一个条目,但print\r显示该条目在那里

PHP foreach over CSV忽略第一个条目,但print\r显示该条目在那里,php,csv,iis,windows-server-2016,Php,Csv,Iis,Windows Server 2016,编辑并解决: 多亏了El_Vanja的var_dump输入,文件的第一行不知何故出现了附加字符(在notepad++中不可见),所以我创建了一个新文件,解决了这个问题。案件结案 原始问题 我们有一个内部网页,用户可以在其中向人力资源部发送表单。为了获取用户信息,我们过去使用activeX,但由于Edge是新标准,activeX不再受支持,因此我们必须更改此设置 首先,用户必须手动输入他们的电子邮件,但正如您所猜测的,对于普通用户来说,这是“太多的小费和东西,对用户不友好!”因此,我构建了一个PH

编辑并解决:

多亏了El_Vanja的
var_dump
输入,文件的第一行不知何故出现了附加字符(在notepad++中不可见),所以我创建了一个新文件,解决了这个问题。案件结案

原始问题

我们有一个内部网页,用户可以在其中向人力资源部发送表单。为了获取用户信息,我们过去使用activeX,但由于Edge是新标准,activeX不再受支持,因此我们必须更改此设置

首先,用户必须手动输入他们的电子邮件,但正如您所猜测的,对于普通用户来说,这是“太多的小费和东西,对用户不友好!”因此,我构建了一个PHP脚本,获取用户信息($\u SERVER['LOGON\u user']),并从CSV列表中读取电子邮件,以便自动插入(是的,我知道这不是最佳做法,但内部网服务器不再被允许访问广告,因此我必须解决这一问题……)

这过去可以正常工作,但自从上次Windows Server更新以来,我有一个用户未被识别,它是CSV列表中的第一个用户(我可以通过将它放在CSV列表的第一个条目中,与任何用户一起复制它,以解决我添加的标题行…)

现在我的问题是:为什么以及如何做到这一点?这个脚本如何“忽略”第一个条目

我的代码:

<?php
$csv = array_map('str_getcsv', file('Users.csv'));
$TempUser = explode("\\", $_SERVER['LOGON_USER'])[1];

foreach($csv As $Value)
{
    //$Value is an array since every entry in the CSV has Logon-name, Name and E-Mail
    if($Value[0] == $TempUser)
    {
        $name = $Value[1];
        $mail = $Value[2];
        break;
    }
}

if(isset($name))
{
    //insert User-Infos
    exit;
}
else
{
    echo $name;
    echo("User ".$_SERVER['LOGON_USER']." not found!");
}
?>
在更新之前,情况并非如此,一切正常。那么,有什么想法发生了变化?这正常吗?问题已经解决,但我很好奇为什么会出现这个问题,或者我做错了什么。
感谢您的输入!

您是如何编辑
Users.csv
文件的

可能是编辑器在文件内容的开头添加了一些看不见的字符(如)


您可以使用echo strlen($Value[0]).PHP_EOL;来签出它。

我看不到任何即时信息,我的第一个想法是,更新是否导致了默认情况,即假定CSV文件中有一个标题行并忽略它,但如果您可以
打印\r
并且它在那里,情况就不会如此。您是如何解决这个问题的,这是否为更改提供了任何线索ed?你试过在值上使用
var\u dump
吗?
print\u r
更好看,但没有额外的数据。我怀疑那里可能有一个不可见的字符。试试
var\u dump($value[0])
并查看它是否有可能导致不匹配的额外内容。@droopsnoot我插入了一个可以忽略的标题行,这样第一个用户也会被识别。但正如你所说,这不可能,为什么要忽略第一行。@El_Vanja感谢你的提示,所以我做了一个
var_dump
,第一行是这样的:
{[0]=>array(3){[0]=>string(7)“kurz”[1]=>string(4)“name”[2]=>string(4)“mail”}
我觉得奇怪的是第一个条目是
string(7)
但它只有4个字符长。因此我在记事本++中检查了该文件,显示了所有额外的字符,但我看不到任何字符。下一步计划是创建新文件。这确认了不可见字符。可能是Windows添加到该文件中的内容(如文件开头标记或其他内容),但我不能确定,我不太熟悉服务器和文件系统。创建一个新文件是一个很好的测试,看看这种情况是否会再次发生。感谢您的输入,问题实际上是csv中一些不可见的字符,正如El_Vanja Suggested所说,
var_dump
显示的字符比显示的多,因此新的csv解决了这个问题。
<?php
    $csv = array_map('str_getcsv', file('Users.csv'));

    foreach($csv As $Value)
    {
        //$Value is an array since every entry in the CSV has Logon-name, Name and E-Mail
        print_r($Value); 
        print("<br>");
    }
    
    print("<br>");
    print("<br>");
    
    print_r($csv);
?>