$str = "<?php \$key = '" . $hash . "'";
когда я пытаюсь создать такую переменную php ломается и ничего не записывает в переменную
при этом $str = "?php \$key = '" . $hash . "'";
если сделать так, то всё заработает, так как же мне записать такую строку в переменную
Eval is evil
Настоятельно рекомендую найти другое решение для исходной задачи.
попытки закрыть возникающую уязвимость чаще оказываются более трудоемкими чем написать сразу безопасным способом.