Сегодня столкнулся с очень интересной особенностью работы file_get_contents и других функций, использующих файловую систему при консольном вызове скрипта.
Как оказалось есть важная деталь при работе в консоли — она состоит в определении текущей директории для составления относительных путей.
Т.е. при вызове с браузера относительный путь строится от самого скрипта. При этом при консольном вызове скрипта — относительный путь строится от папки, которая является текущей в терминале.
Например, при вызове http://site.com/folder/script.php текущей папкой скрипта (от которой будет работать относительный путь) будет именно папка folder. Это логичное и привычное поведение.
НО. Если мы вызовем этот же скрипт с консоли (предварительно перейдя в любой каталог) — например так:
cd /home/some_user php /var/www/site.com/folder/script.php
… то текущей папкой будет выступать /home/some_user.
Думаю теперь стало понятнее. При этом константа __DIR__ по прежнему сохраняет верное значение и для правильной работы file_get_contents, file и других функций следует просто изменить текущую папку, например так:
chdir( __DIR__ ) ;