У вас есть типографская ошибка:
$attachment_lot_layer_dir = $attachment_lot_dir . $txtLayer."/";
...
chmod($attachment_lot_layer ,0777);
Эта переменная не существует, так что да, это никогда не сработает.Mkdir из PHP уважает umask в Linux (при условии, что вы работаете в Linux, иначе этого не произойдет), поэтому ваши каталоги не создаются в маске 0777 в соответствии с запросом;однако chmod не учитывает umask, поэтому ваш первый вызов chmod на самом деле меняет маску этого каталога на 0777. Второй вызов не выполняется из-за неверного имени переменной.Отсюда и поведение, которое вы видите.
FWIW, mkdir имеет второй необязательный логический параметр, который позволит вам рекурсивно создать структуру каталогов за один вызов, передав ему полный путь к каталогу (см. здесь ).Вам также следует взглянуть на этот вопрос, чтобы понять, что делать с umask перед вызовом mkdir, если вы хотите полностью избежать последующих вызовов chmod.