Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/130.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试图使用substr仅显示文本文件中的最后6个字符_Php_File_Substr - Fatal编程技术网

PHP试图使用substr仅显示文本文件中的最后6个字符

PHP试图使用substr仅显示文本文件中的最后6个字符,php,file,substr,Php,File,Substr,我是php新手。只是想运行这个本地网站。 尝试从每5分钟更新一次的txt文件中提取最后5个字符。 这是我的剧本: <?php $temperature = include( "temperaturelog.txt"); $temp = substr($temperature, -5); print $temp ?> 以下是我的网页显示的内容: 关于我做错了什么有什么线索吗?或者误解文档?使用文件获取内容'fileName'或fopen'fileName','mode';f

我是php新手。只是想运行这个本地网站。 尝试从每5分钟更新一次的txt文件中提取最后5个字符。 这是我的剧本:

    <?php 
$temperature = include( "temperaturelog.txt");
$temp = substr($temperature, -5);
print $temp
?>
以下是我的网页显示的内容:

关于我做错了什么有什么线索吗?或者误解文档?

使用文件获取内容'fileName'或fopen'fileName','mode';fread'fileName',长度

第一种方法:

将PHP代码替换为以下内容:

<?php 
$temperature = file_get_contents( "temperaturelog.txt");
$temp = substr($temperature, -5);
print $temp;
?>
第二种方法的更多信息:


直接的问题是您正在使用一个PHP。您应该只使用include来包含PHP可执行代码——这就是函数的用途。它不会返回文件内容

实现类似功能的一个非常简单的功能是,不过现在还不要急着去做。将读取整个文件并将其作为字符串返回。非常简单,如果这是你想要做的-但是你只想要最后五个字符。因此,我们可以编写更多的代码,只读取最后五个字符。这不会太难,我保证

首先,我们想要一个文件。这将为我们提供一个文件指针,我们将在后续调用中使用它来引用打开的文件。请注意它。以下内容将在只读模式下创建文件-

现在,我们有了一个文件指针$fp,我们可以使用这个文件。但我们需要知道真相。例如,有很多方法可以做到这一点,但最简单的方法可能是使用

现在我们知道了答案。我们将对名为的文件执行一个操作。假设您在文本编辑器中打开了文件,我们将把光标移动到结尾之前的5个字符-

现在我们已经在文件中设置了,我们可以一直到文件的末尾。第二个参数1024指定从文件中读取的字节数。当然,我们将只阅读5,但是我将其设置为高,以演示它在文件末尾的行为-有关第二个参数的更多信息,请参阅

$text = fread($fp, 1024);
现在,我们将最后5个字符存储在$text中,并已到达文件的末尾。我们可以使用文件指针,如果确实需要的话,也可以使用开始

完成后关闭文件是一种很好的做法。这允许其他进程立即打开它,而不是等待PHP关闭文件本身

在一堆代码片段中,它看起来可能比实际的要大,所以让我们把所有这些放在一起:

// Open and get size
$fp = fopen('temperaturelog.txt', 'r');
$size = filesize('temperaturelog.txt');

// Seek to just before the end
$pos = $size - 5;
fseek($fp, $pos);

// Read and close
$text = fread($fp, 1024);
fclose($fp);
等同于:


但是,您可以预期该示例的可伸缩性要小得多。对于简单的东西,这是一种享受

尝试使用文件\u get\u contentstemperaturelog.txt而不是includeit仍然显示这两个值,然后完全重新启动使其工作,嗯,奇怪。如果从include中看到任何内容,可能是整个文件内容?此解决方案在完全重新启动计算机后工作,谢谢@DalkfyR13,我用另一个解决方案和链接更新了我的答案,以获得更多关于所使用的功能的信息。我的答案帮助了你,请考虑点击我的答案旁边的抽搐来接受我的答案。
$fp = fopen('temperaturelog.txt', 'r');
$size = filesize('temperaturelog.txt');
$pos = $size - 5;
fseek($fp, $pos);
$text = fread($fp, 1024);
fclose($fp);
// Open and get size
$fp = fopen('temperaturelog.txt', 'r');
$size = filesize('temperaturelog.txt');

// Seek to just before the end
$pos = $size - 5;
fseek($fp, $pos);

// Read and close
$text = fread($fp, 1024);
fclose($fp);
$size = filesize('temperaturelog.txt');
$file = file_get_contents('temperaturelog.txt');
$text = substr($file, -5);