Вот наглядная разница между программистом и жертвой видеоуроков.
Потребитель видеопродукции, умеющий только копипастить говнокод, но не умеющий думать, может только пойти на тостер и жалобно проблеять "Объясниииите мне, почему мой код на моем сервере не работаеееет".
А программист понимает, что выяснить "с чем это может быть связано" может только он сам. А для этого надо писать не говнокод в одну строчку, а разделять операции между собой.
И проверять результат каждой.
Таким вот нехитрым способом можно конкретно узнать, "с чем связана проблема".
У нас есть переменная $id['v'], про которую мы думаем, что в ней есть какой-то идентификатор. Но проверить, есть ли там на самом деле что-то в этой переменной, должен дядя с тостера.
У нас есть ключевой оператор file_get_contents(), который и должен возвращать какую-то инфу. Но мы эту инфу не проверяем. Мы, программисты дагестана, делаем такой узки-узки код, в один строчька, чтобы низки-низки пасадка биль! Патамучто настаящи джигит.
Поэтому результат file_get_contents мы не проверяем а сразу запихиваем в json_decode, который и вернет null, если ему передать совсем не JSON. А если там не JSON, значит, наверное, надо глазками посмотреть - ЧТО вернула file_get_contents.
Но никто в видеокурсах не рассказал, что мало накопипастить говнокода, а надо еще и иногда проверять, что он возвращает