Тестирование PHP в 1С-Битрикс: практические приёмы
Проверка 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 OnBitrix 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 )