Я пытаюсь прочитать хэш торрент-файла, поэтому я использую простую программу под названием torrenttools.
Когда я запускаю этот файл php на своем локальном хосте:
<html>
<head>
<?php
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
$torrenthash = shell_exec ("./torrenttools info '/var/www/html/torrents/Elle -JP- (Sharp X68000).torrent' | grep hash | cut -b 20-59 2>&1");
echo "<pre>".$torrenthash."</pre>";
?>
</head>
</html>
Однако вызов shell_exec ничего не возвращает, если я запускаю его из командной строки:
root@milton:/var/www/html# php test.php
<html>
<head>
<pre>03b0c32a389c280213506becabf6bd61ca71c38a
</pre></head>
</html
Насколько я знаю, разрешение на файл в порядке:
root@milton:/var/www/html# ls -l
total 34596
-rw-r--r-- 1 www-data www-data 10701 May 8 11:48 index.html.bak
-rw-r--r-- 1 www-data www-data 2404 May 10 14:06 index.php
-rw-r--r-- 1 www-data www-data 21 May 8 11:53 phpinfo.php
-rw-r--r-- 1 www-data www-data 324 May 18 07:40 test.php
drwxr-xr-x 2 www-data www-data 4096 May 18 07:26 torrents
-rwxrwxrwx 1 www-data www-data 35390656 May 12 02:33 torrenttools
-rw-r--r-- 1 www-data www-data 3012 May 18 07:25 upload.php
Что я делаю не так? Это сводит меня с ума
Когда я пытаюсь запустить файл test.php из браузера, я получаю пустую страницу, однако, когда я пытаюсь запустить его из командной строки, он работает отлично. Я использую функцию shell_exec для вызова программы torrenttools для получения хеша торрента.
Заранее спасибо.






Возможно, попробуйте следующее?
Вы можете попробовать этот код для печати ошибок
$cmd = "./torrenttools info '/var/www/html/torrents/Elle -JP- (Sharp X68000).torrent' | grep hash | cut -b 20-59 2>&1";
$torrenthash = shell_exec($cmd);
echo "<pre>".$torrenthash."</pre>";
$errorOutput = shell_exec("echo $?");
echo "Error Output: ".$errorOutput;
shell_exec следует использовать с осторожностью. Его очень легко использовать не по назначению, что часто приводит к головной боли и проблемам с безопасностью. Попробуйте найти конкретное решение вашей проблемы.
Способ генерации хеша из торрент-файла задокументирован здесь.
Вы можете использовать christeredvartsen/php-bittorrent, чтобы сделать это на чистом PHP. Из оболочки включите библиотеку в свой проект:
composer require christeredvartsen/php-bittorrent
Тогда просто:
require_once 'vendor/autoload.php';
$torrent = \BitTorrent\Torrent::createFromPath('/path/to/file.torrent');
$hash = $torrent->getHash();
Пожалуйста, при предоставлении ответа на актуальную проблему, а не на заданный вопрос, также рассмотрите возможность изменения названия вопроса. Это поможет людям, у которых есть похожая проблема, И не даст ложного срабатывания для людей, которые ищут общий ответ.
Это сработало прекрасно; Я смог получить хэш файлов только благодаря вашему примеру кода, опубликованному здесь, потому что документация на README.md говорит только об использовании var_dump в сочетании с другими функциями, которые я не мог правильно использовать, такими как
$composer->encodeSomething()и$composer->decodeSomething(). Немного покопавшись в Torrent.php src, я нашел другие функции, которые мне понадобятся, такие как$torrent->getComment(),$torrent->getCreatedBy()и т. д.; чего, я думаю, будет достаточно, чтобы проанализировать все данные, которые мне нужны. Большое спасибо.