PHP strpos() not working


PHP strpos() not working

我正试图让PHP在文本文件中搜索字符串。我知道字符串存在于文本中,PHP可以显示所有文本,但strpos返回false。这是我的代码:

<?php
    $pyscript = "testscript.py";
    //$path = "C:''Users''eneidhart''Documents''Python Scripts''";
    $process_path = "C:''Users''eneidhart''Documents''ProcessList.txt";
    //$processcmd = "WMIC /OUTPUT: $process PROCESS get  Caption,Commandline,Processid";
    $process_file = fopen($process_path, "r") or die("Unable to open file!");
    $processes = fread($process_file);
    if (strpos($processes, $pyscript) !== FALSE) {
        echo "$pyscript found";
    } elseif (strpos($processes, $pyscript) === FALSE) {
        echo "$pyscript NOT found :(";
    } else {
        echo "UHHHHHHHH...";
    }
    echo "<br />";
    while (!feof($process_file)) {
        echo fgets($process_file)."<br />";
    }
    fclose($processfile);
    echo "End";
?>

while循环将打印出文本文件的每一行,包括

python.exe                     python  testscript.py

strpos似乎仍然找不到"testscript.py"。
这个脚本的最终目标不一定是读取该文本文件,而是检查特定的python脚本当前是否正在运行。(顺便说一句,我在Windows7上工作。)文本文件是使用注释掉的$processcmd生成的,我试着让PHP返回该命令的输出,如下所示:

$result = `$processcmd`;

但没有返回任何值。这个输出的格式似乎与PHP不一致,这可以解释为什么strpos不起作用,但这是我所知道的唯一一个命令,它会显示哪个python脚本正在运行,而不仅仅是显示python.exe正在运行。有没有一种方法可以让这个文本可读,甚至只是用另一种方法让PHP识别python脚本正在运行?

提前感谢!

编辑:我想我找到了问题的根源。我创建了自己的文本文件(test.txt),其中只包含我正在搜索的字符串,并按照建议使用了file_get_contents,这很有效,尽管它不适用于原始文本文件。事实证明,$processcmd下列出的命令创建了一个使用Unicode编码的文本文件,而不是ANSI(我的test.txt编码在其中)。该命令是否可以创建一个具有不同编码的文本文件,或者更简单地告诉PHP使用Unicode,而不是ANSI?

您可以使用函数preg_grep()file():

$process_path = "C:''Users''eneidhart''Documents''ProcessList.txt";
$results = preg_grep('/'btestscript.py'b/', file($process_path));    
if(count($results)) {
    echo "string was found";
}

您应该遵循第一条注释中给出的建议,并使用以下任一项:

 file_get_contents($process_path);

fread($process_file, filesize($process_path));

如果这个修复还不够,并且strpos上确实有问题(事实并非如此),您可以使用:

preg_match("/.*testscript'.py.*/", $processes)

注意:尽量使用strpos,不要使用preg_match,因为文档中没有建议这样做。

好吧,我找到了答案。感谢那些建议使用file_get_contents()的人,因为如果没有这些建议,我不会来到这里。事实证明,WMIC输出Unicode,而PHP不喜欢阅读它。解决方案是另一个将Unicode转换为ANSI的命令:

cmd.exe /a /c TYPE unicode_file.txt > ansi_file.txt

我希望这能对那些试图检查特定python脚本是否有效的人有所帮助,或者你只是想使用WMIC。