我有一个包含单个字符串的文件。 我打开文件并读取值,使用fopen和fgets,我注意到在字符串的末尾添加了一个空格。
$file = fopen("myfile", "r") or exit("<br><p>Unable to open file</p><br>");
$mystring= fgets($file);
fclose($file);
myfile的内容:
Hello
测试
echo "<p>'".$mystring."'</p>"; //Output: 'Hello '
正如您所看到的,即使文件中没有空格,字符串末尾也会有一个空格。
我尝试使用linux命令&#34; cat&#34;:
$mystring = shell_exec("cat myfile");
echo "<p>'".$mystring."'</p>"; //Output: 'Hello '
字符串末尾仍有空格。
我的目标是将文件中的字符串与我的代码中的值进行比较。
if ($mystring === "Hello")
{
echo "Equal";
}
else
{
echo "not equal";
}
我总是得到&#34;不等于&#34;。 如何读取实际文件内容并将其存储到我的变量中?
答案 0 :(得分:3)
要调试字符串,请尝试以下操作:
foreach(str_split($mystring) as $chr) {
printf("[%02x] %s <br />",ord($chr),$chr);
}
在你的情况下,这应该会产生类似......
的东西[48] H
[65] e
[6c] l
[6c] l
[6f] o
[0a]
记下最后一个。 0x0a
是一个换行符,这是通过fgets
和shell_exec
获得的所有文本行的结尾,因为它标记了行的结尾(两个函数都返回) a&#34;&#34;来自各自活动的输出线。)
(注意:您可能会获得[0c] [0a]
或CRLF,具体取决于您的系统。)
要修复,只需在处理它之前对字符串使用rtrim()
。
编辑:由于您在评论中添加了'hello '
的案例,因此您可以使用更明确的内容,例如rtrim($mystring, "\r\n");
答案 1 :(得分:1)
)有很多事情可能是错的。我将从检查变量内容开始 - 如果可以调试,或者使用var_dump。
解决问题的一个好方法是使用file_get_contents()代替(http://php.net/manual/de/function.file-get-contents.php)。我认为这正是针对这类问题而制定的;)
答案 2 :(得分:1)
这可能是MsDos,Unix或Mac等行结尾的差异。您可以使用auto_detect_line_endings函数。 (更多信息here)。
或者您可以在比较之前简单地修剪输出文件中的文本,如下所示。
$file = fopen("myfile", "r") or exit("<br><p>Unable to open file</p><br>");
$mystring= fgets($file);
$mystring= trim($mystring);
fclose($file);