Автоматически создавать json-файл, в котором перечислены все изображения в каталоге?

У меня есть каталог «файлы» на моем веб-пространстве. В этом каталоге представлены png-изображения, которые могут часто меняться.

Имена файлов должны храниться в json-файле.

Есть ли способ автоматически создать json-файл, который отображает все изображения в каталоге следующим образом:

art_showWindow({"art":[ {"href":"http://img.ruphp.com/file/art_noveau_1.png","title":"Art Noveau 1"}, {"href":"http://img.ruphp.com/file/art_noveau_5.png","title":"Art Noveau 5"}, {"href":"http://img.ruphp.com/file/art_noveau_23.png","title":"Art Noveau 23"}, ]}); 

Название может, конечно, быть повторением имени файла, если выше это слишком сложно.

Это возможно?

Заранее спасибо за вашу помощь.

Томас

Насколько я знаю, нет волшебной собственной функции PHP, которая делает именно это, хотя это было бы не удивительно.

Поскольку написание сценария для вас не поможет вам многому научиться, я думаю, что лучше всего указать на ряд инструментов, которые можно использовать для этой задачи.

Прежде всего, вы хотите найти все PNG-файлы в каталоге; Чтобы перечислить все файлы (и каталоги) в каталоге, используйте scandir ($ directory) . Оттуда вы можете использовать цикл foreach для итерации по возвращенному массиву и только привязать файлы PNG в новом массиве.

Поскольку вывод scandir не делает видимыми файлы и каталоги, вы можете запустить is_dir по результатам, чтобы убедиться, что вы только получаете файлы.

Затем вы можете использовать pathinfo для извлечения расширения и базового имени (имя файла без его расширения, помеченное как «filename» на выходе pathinfo) текущего файла. Вам понадобится расширение, чтобы выяснить, является ли файл PNG (и, следовательно, один для добавления в ваш новый массив).

После того, как вы повторили массив scandir и создали массив с именами PNG-файлов, вы можете начать строить свой последний массив. Вы хотите запустить другой цикл foreach , в котором вы добавляете «http: //www.domain.example/files/» к именам файлов и делаете магию для преобразования имени файла в заголовок. Вы хотите, чтобы массив был структурирован следующим образом:

 $art = array( array( 'href' => $full_url, 'title' => $title ), array( 'href' => $full_url, 'title' => $title ), // etc ); 

Чтобы получить титул, я бы пошел с этим, казалось бы, сложным однострочным:

 $title = ucwords( // Give words an upper case first letter str_replace('_', ' ', //replace underscores by spaces substr($filename, 0, (strlen($filename) - 4) //strip .png extension ) ); 

Как только цикл foreach будет выполнен, у вас будет полностью заполненный массив предметов. Чтобы преобразовать это в JSON, вы просто используете json_encode , например:

 $output = json_encode(array('art' => $art)); 

Вы упомянули, что хотите сохранить его как json-файл; Вы уверены, что не хотите, чтобы PHP выводил JSON?

В любом случае, чтобы сохранить файл, достаточно легко, file_put_contents выполнит эту работу.

Если вы просто хотите, чтобы PHP выводил его, вам нужно установить заголовок HTTP-типа Content-Type в заголовок application / json: header('Content-Type: application/json'); а затем просто эхо-выход $ output.

Надеюсь, это поможет!

(И я понимаю, что для этого потребовалось больше усилий, чем просто написать вам фрагмент кода, но по крайней мере вам все равно придется немного поработать над этим. Удачи!