У меня есть каталог «файлы» на моем веб-пространстве. В этом каталоге представлены 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.
Надеюсь, это поможет!
(И я понимаю, что для этого потребовалось больше усилий, чем просто написать вам фрагмент кода, но по крайней мере вам все равно придется немного поработать над этим. Удачи!