корень бед тут
$c = "/link/$b";
вы задаете путь до каталога/файла не относительно корня сайта/скрипта, а
путь до файла на сервере
указывайте всегда полный путь до каталога на сервере, а не то как вы его ощущаете.
один из простых и универсальных способов - получить полный путь до каталога, в котором находится скрипт, через
магическую константу __DIR__
другой способ (по моему скромному мнению правильный) - вытащить из
массива с информацией о среде исполнения путь до корня сайта -
$_SERVER['DOCUMENT_ROOT']
(не работает в случае php-cli, запуске скрипта через командную строку, это надо знать и помнить, когда пишете скрипты, которые запускаются из консоли через
php /path/to/script.php
)
Дальше уже относительно этих путей задавать путь до каталога/файла
UPD: ну и, конечно же, перед созданием файла не забываем создавать каталог, в который файл поместить хотите.
mkdir(); вам в помощь
PS: не обольщайтесь, что php позволяет оперировать файлами относительно корня сервера, на нормальном сервере/хостинге, даже если у пользователя, от которого работает сайт, есть права на чтение/запись в какой то каталог за пределами сайта, то через переменную
open_basedir
ограничиваются возможности ваших скриптов (прописываются каталоги, выше которых ваши скрипты не имеют права сунуться)