Как прочитать хэш торрент-файла?

Я пытаюсь прочитать хэш торрент-файла, поэтому я использую простую программу под названием 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 для получения хеша торрента.

Заранее спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Возможно, попробуйте следующее?

  1. Используйте абсолютные пути к файлам командного инструмента и торрент-файла, чтобы веб-сервер мог их найти.
  2. Проверьте журналы ошибок для сервера Apache и посмотрите, есть ли какие-либо сообщения об ошибках.

Вы можете попробовать этот код для печати ошибок

$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() и т. д.; чего, я думаю, будет достаточно, чтобы проанализировать все данные, которые мне нужны. Большое спасибо.

Leandro 21.05.2023 13:33

Пожалуйста, при предоставлении ответа на актуальную проблему, а не на заданный вопрос, также рассмотрите возможность изменения названия вопроса. Это поможет людям, у которых есть похожая проблема, И не даст ложного срабатывания для людей, которые ищут общий ответ.

Your Common Sense 21.05.2023 13:36

Другие вопросы по теме