А что делать с кривыми правами? Например скрипты запускаются от nobody? В таком случае могу порекомендовать использовать FTP в скрипте, т.к. он будет работать много быстрее на родном сервере. Т.е. распаковываются файлы, скрипт соединяется по FTP с этим же сервером и перезаливает файлы туда с нужными правами.
Это тоже не панацея, я сталкивался по работе с серверами, где нет не только функции «переместить файл из папки в папку минуя локальную машину», но и с серверами, где невозможно тоталом установить права на доступ к файлам и не дают доступ к ssh. Клиника, не спорю, но попадается.
Делаем самораспаковывающийся архив или секции в PHP файлах