Я пытаюсь заставить PHP искать текстовый файл для строки. Я знаю, что строка существует в тексте, PHP может отображать весь текст, и все же strpos
возвращает false. Вот мой код:PHP strpos() не работает
<?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. (Я работаю на Windows 7, кстати.) Текстовый файл был создан с помощью закомментирована $processcmd
, и я попытался имея PHP вернуть вывод этой команды, как это:
$result = `$processcmd`;
, но никакой ценности был возвращен. Кое-что о формате этого вывода, похоже, не согласуется с PHP, что объясняет, почему strpos
не работает, но это единственная команда, которую я знаю о том, что покажет мне, какой скрипт python работает, а не просто показывает мне, что python .exe запущен. Есть ли способ получить этот текст для чтения или даже другой способ заставить PHP распознать, что работает скрипт python?
Заранее благодарен!
EDIT: Я думаю, что я нашел источник проблемы. Я создал свой собственный текстовый файл (test.txt), который содержал только строку, которую я искал, и использовал file_get_contents
, как было предложено, и это сработало, хотя оно не работало для исходного текстового файла. Выясняется, что команда, указанная в разделе $processcmd
, создает текстовый файл с кодировкой Unicode, а не ANSI (который был закодирован моим test.txt). Возможно ли, чтобы эта команда создала текстовый файл с другой кодировкой или даже проще, сообщила PHP, чтобы использовать Unicode, а не ANSI?
По крайней мере, согласно [документации] (http://us.php.net/manual/en/function.fread.php), 'fread' требует второй аргумент (' length'). Возможно, вы хотите использовать ['file_get_contents'] (http://us.php.net/manual/en/function.file-get-contents.php) вместо этого? –
Также есть предупреждение в php.net, например, в системах, которые различают двоичные и текстовые файлы (например, Windows), файл должен быть открыт с помощью «b», похоже, что вы находитесь на окнах, а ваш fopen использует только «r», rb " –
Вы пытались' file_get_contents() 'или' file() '? Вы можете найти [это] (http://stackoverflow.com/a/24008078/4641017) полезным. –