Тестирование PHP в 1С-Битрикс: практические приёмы

Раздел: Веб-разработка -> CMS Битрикс

Проверка PHP в 1С-Битрикс: от простого к сложному

Как выполнить базовую диагностику PHP через админ-панель?

Основной инструмент для быстрой проверки - штатная страница «Проверка системы» в административной части. Она доступна по адресу /bitrix/admin/site_checker.php. Этот модуль анализирует версию PHP, набор установленных расширений, настройки времени выполнения и выдаёт рекомендации.

Для запуска теста PHP достаточно перейти в раздел «Настройки» → «Инструменты» → «Проверка системы» или набрать URL напрямую. Результат отображается в виде таблицы с цветовой индикацией (зелёный - OK, жёлтый - предупреждение, красный - ошибка).

Типичные проблемы, обнаруживаемые этим инструментом:

  • Недостаточное значение memory_limit (рекомендуется не менее 256 МБ);
  • Отключённые функции, необходимые Битриксу (ftp_connect, mbstring);
  • Устаревшая версия PHP (ниже 7.4).

Проблема: Проверка системы не запускается или выдаёт пустой экран.

Это часто связано с ошибкой синтаксиса в PHP или превышением лимита памяти. Рекомендуется временно увеличить error_reporting в .htaccess для вывода ошибок:

php_value error_reporting -1
php_value display_errors On

Bitrix test php (тестирование php в 1с-битрикс)

Также проверьте, что файл bitrix/modules/main/admin/site_checker.php существует и доступен для чтения.

Как проверить конфигурацию PHP через phpinfo() прямо в Битрикс?

В некоторых случаях нужно увидеть полный вывод phpinfo() - все параметры, расширения и пути. Для этого создайте простой скрипт в корне сайта:

<?php
// test_php.php
phpinfo();
?>

Bitrix api php (api битрикс на php)

Откройте в браузере http://вашсайт/test_php.php. После завершения диагностики скрипт следует удалить, чтобы не раскрывать конфиденциальные данные.

Важно: если на сайте включена защита через bitrix/php_interface/init.php или .htaccess, доступ к такому файлу может блокироваться. Тогда положите файл за пределами /bitrix/ или временно отключите правила.

Проблема: Скрипт не запускается, выдаётся ошибка 403 или пустая страница.

Проверьте, не перехватывает ли запрос модуль mod_rewrite. Добавьте в начало скрипта завершение работы после вывода:

<?php
if (defined('BX_PERSONAL_ROOT')) {
    echo "Тест выполняется внутри Битрикс. Лучше создать файл вне /bitrix/";
}
phpinfo();
exit;
?>

Как протестировать производительность PHP-скрипта (время выполнения)?

Для оценки быстродействия отдельных фрагментов кода используйте встроенный класс \Bitrix\Main\Diag\Debug или простой замер через microtime.

Пример замера выполнения агента:

$start = microtime(true);
// Эмуляция работы агента
$sum = 0;
for ($i = 0; $i < 100000; $i++) {
    $sum += $i;
}
$time = microtime(true) - $start;
echo "Время: " . round($time, 4) . " сек.";
Время: 0.0212 сек.

Для комплексного тестирования производительности страниц можно использовать встроенный профайлер Битрикс («Производительность» в админке).

Проблема: Результат замера всегда 0.0000 сек.

Возможно, PHP-акселератор (OPcache) кеширует код и скрипт выполняется слишком быстро, или время выполнения меньше точности микросекунд. Увеличьте количество итераций или используйте hrtime() (PHP 7.3+).

$start = hrtime(true);
for ($i = 0; $i < 1000000; $i++) { $sum += $i; }
$elapsed = (hrtime(true) - $start) / 1e9;
echo round($elapsed, 6) . " сек";

Как выявить ошибки PHP при скрытых ошибках (на боевом сервере)?

На production-сайтах вывод ошибок обычно отключен. Для диагностики создайте скрипт, который логирует ошибки в файл, не показывая их пользователю.

<?php
// error_test.php
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
$errorHandler = function($errno, $errstr, $errfile, $errline) {
    $log = date('Y-m-d H:i:s') . " [$errno] $errstr в $errfile:$errline\n";
    file_put_contents(__DIR__.'/php_errors.log', $log, FILE_APPEND);
};
set_error_handler($errorHandler);

// Намеренная ошибка
echo $undefinedVar;

restore_error_handler();
?>

После выполнения проверьте содержимое файла php_errors.log рядом со скриптом.

Проблема: Лог не создаётся или пустой.

Убедитесь, что директория доступна для записи веб-сервером. Если используется PHP-FPM, пользователь www-data должен иметь права на запись. Для отладки временно используйте error_log с системным логом.

Дополнительные расширенные примеры тестирования PHP в проектах на 1С-Битрикс.

Пример
// Пример 1: Тестирование совместимости с PHP 8.x
// Проверка, что используется mbstring и intl extension
if (!function_exists('mb_strlen')) {
    echo "Ошибка: требуется mbstring";
}
if (!extension_loaded('intl')) {
    echo "Ошибка: требуется intl";
}
echo "Расширения OK";
Расширения OK
Пример
// Пример 2: Загрузочное тестирование - отправка нескольких параллельных запросов
// с помощью cURL (скрипт для админки)
$urls = ['/index.php', '/catalog/', '/bitrix/admin/'];
$mh = curl_multi_init();
$handles = [];
foreach ($urls as $i => $url) {
    $ch = curl_init('http://example.com'.$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_multi_add_handle($mh, $ch);
    $handles[$i] = $ch;
}
$running = null;
do {
    curl_multi_exec($mh, $running);
    curl_multi_select($mh);
} while ($running > 0);
foreach ($handles as $ch) {
    $output = curl_multi_getcontent($ch);
    $info = curl_getinfo($ch);
    echo "URL: " . $info['url'] . " статус: " . $info['http_code'] . "\n";
    curl_multi_remove_handle($mh, $ch);
}
curl_multi_close($mh);
URL: http://example.com/index.php статус: 200
URL: http://example.com/catalog/ статус: 200
URL: http://example.com/bitrix/admin/ статус: 302
Пример
// Пример 3: Использование Bitrix Testing Framework (PHPUnit)
// Файл: /local/phpunit/tests/SumTest.php
use PHPUnit\Framework\TestCase;

class SumTest extends TestCase
{
    public function testAddition()
    {
        $this->assertEquals(4, 2 + 2);
    }
    public function testKernelAvailable()
    {
        $this->assertTrue(class_exists('\Bitrix\Main\Application'));
    }
}
PHPUnit 9.5.10 by Sebastian Bergmann and contributors.
..
2 / 2 (100%)
Time: 0.03 seconds, Memory: 8.00 MB
OK (2 tests, 2 assertions)
Пример
// Пример 4: Тестирование работы с БД через D7
$connection = \Bitrix\Main\Application::getConnection();
$sql = 'SELECT COUNT(*) as cnt FROM b_user';
$result = $connection->query($sql);
$row = $result->fetch();
echo "Количество пользователей: " . $row['cnt'];
Количество пользователей: 142
Пример
// Пример 5: Проверка работы кеша
$cache = \Bitrix\Main\Data\Cache::createInstance();
$cacheDir = '/test';
$cacheId = 'mydata';
if ($cache->initCache(3600, $cacheId, $cacheDir)) {
    $data = $cache->getVars();
    echo "Из кеша: " . print_r($data, true);
} else {
    $data = ['time' => date('H:i:s')];
    $cache->startDataCache();
    $cache->endDataCache($data);
    echo "Записано в кеш: " . print_r($data, true);
}
Записано в кеш: Array ( [time] => 14:45:12 )

Тестирование PHP в 1С-Битрикс - comments

En
Bitrix test php (php)