Как исправить проблему с буферизацией с помощью nginx и php7.3-fpm

#php #nginx

#php #nginx

Вопрос:

Я использую nginx 1.10.3 и php7.3-fpm. Мне нужно заполнить выпадающий список на веб-странице именами файлов в данном каталоге. Проблема в том, что что-либо в цикле ‘foreach’ в php-скрипте НЕ выводится на веб-сервер. Все это отлично работает при использовании php-cli.

Я подозреваю, что это как-то связано с тем, что буферы не сбрасываются, и я перепробовал абсолютно все, что я могу найти в Интернете, чтобы попытаться решить эту проблему. Любая помощь в решении этой проблемы будет высоко оценена!!!

Это мой index.php файл, используемый для тестирования:

 <!doctype html>

<html lang="en-us">>
<head>
<meta charset="UTF-8">
</head>
<body>

<h1>PHP drop-down list population test</h1>
<?php
header('X-Accel-Buffering: no');
header('Cache-Control: no-cache');
header('Content-Encoding: none');

$path = "/root/Music/";
$flist = glob($path . "*.wav");
echo("<form>n");
echo("<select name="music">n");

foreach($flist as $fname) {
$info = pathinfo($fname);
$fn = $info['filename'];
if($idx == 0)
    echo("<option value="$fname" selected>$fn</option>n");
else
    echo("<option value="$fname">$fn</option>n");
$idx  ;
}
ob_end_flush();
flush();

echo("</select>n");
echo("</form>n");
?>

</body>
</html>
  

Ниже приведен результат, который я получаю с помощью curl:

 <!doctype html>

<html lang="en-us">>
<head>
<meta charset="UTF-8">
</head>
<body>

<h1>PHP drop-down list population test</h1>
<form>
<select name="music">
</select>
</form>

</body>
</html>
  

Это то, что я ожидаю получить:

 <!doctype html>

<html lang="en-us">>
<head>
<meta charset="UTF-8">
</head>
<body>

<h1>PHP drop-down list population test</h1>
<form>
<select name="music">
<option value="/root/Music/church-chime.wav" selected>church-chime</option>
<option value="/root/Music/dixie-horn.wav">dixie-horn</option>
<option value="/root/Music/evacuate-alarm.wav">evacuate-alarm</option>
</select>
</form>

</body>
</html>
  

Комментарии:

1. Вы проверили содержимое $flist ? var_dump($flist); Возможно, это пустое

2. Кроме того, у вас, вероятно, возникла проблема с сохранением. nginx (www-data?) не имеет разрешения на чтение /root/music .

Ответ №1:

lbu — Спасибо! Часто самые простые вещи могут привести вас к отмене (Doh!). Проблема действительно заключалась в отсутствии разрешений для каталога.

Все исправлено и работает сейчас.

Мы можем считать, что на этот вопрос дан ответ!