- Как в PHP полностью корректно экранировать для Shell'а?, Аноним, 12:21 , 20-Июл-22 (1) +3
Вообще escapeshellarg, но лучше с самого начала все необходимое с файлами делать в пхп. realpath/stat для валидации путей. Или наоборот, все делать в шелле, например пайп вида mysql | sed | xargs -l sh -c
- Как в PHP полностью корректно экранировать для Shell'а?, Кровосток, 16:51 , 20-Июл-22 (3) +2
> Вообще escapeshellarg, но лучше с самого начала все необходимое с файлами делать > в пхп. realpath/stat для валидации путей. > Или наоборот, все делать в шелле, например пайп вида mysql | sed > | xargs -l sh -c Ну там на самом деле просто более-менее развесистая логика по обработке данных в БД ип прочее. Конечно можно всё и в shell организовать, но это точно забивание гвоздей микроскопами. Если делать всё в PHP, то есть мнение что будем медленнее существенно работать. А вот логику на PHP с формированием заданий оптимальных для shell и их выполнения на его уровне - это как мне кажется сбалансированный подход.
- Как в PHP полностью корректно экранировать для Shell'а?, Кровосток, 16:54 , 20-Июл-22 (5) +2
> Вообще escapeshellarg, но лучше с самого начала все необходимое с файлами делать > в пхп. realpath/stat для валидации путей. > Или наоборот, все делать в шелле, например пайп вида mysql | sed > | xargs -l sh -c Спасибо за пояснения!
- Как в PHP полностью корректно экранировать для Shell'а?, Ann None, 16:44 , 20-Июл-22 (2) +3
слава костылям и велосипедам!п.с. как только ни извратятся, лишь бы имя файла в кавычки не брать...
- Как в PHP полностью корректно экранировать для Shell'а?, Кровосток, 16:53 , 20-Июл-22 (4) +2
> слава костылям и велосипедам! > п.с. как только ни извратятся, лишь бы имя файла в кавычки не > брать...Т.е. прямо вот можно файл с абсолютно любым именем просто оформить в виде
ln -s '$srcFile' '$dstFile' ? - Как в PHP полностью корректно экранировать для Shell'а?, Кровосток, 16:55 , 20-Июл-22 (6) +2
> слава костылям и велосипедам! > п.с. как только ни извратятся, лишь бы имя файла в кавычки не > брать...Спасибо за мысль, подумаю над этим вариантом.
- Как в PHP полностью корректно экранировать для Shell'а?, ыы, 11:23 , 21-Июл-22 (7) +2
> слава костылям и велосипедам! > п.с. как только ни извратятся, лишь бы имя файла в кавычки не > брать...А если в имени файла уже есть и пути, и кавычки, и точка с запятой?
- Как в PHP полностью корректно экранировать для Shell'а?, Кровосток, 14:33 , 21-Июл-22 (8) +1
>> слава костылям и велосипедам! >> п.с. как только ни извратятся, лишь бы имя файла в кавычки не >> брать... > А если в имени файла уже есть и пути, и кавычки, и > точка с запятой?Вообще чисто с практической точки зрения, попробую сегодня создать такое имя и с ним проверить кавычки на месте. Достаточно ли будет например в исходном имени (пути) заменить все ' на \' и оставить неэкранированные лишь те которые обрамляют аргумент, т.е.
ln -s 'ПУТЬ_\'ЭКРАНИРОВАНЫЙ\'_С_КАВЫЧКАМИ.jpg' 'КУДА_НАДО.jpg' Но в моём конкретно случае, справедливости ради надо заметить, что в моём случае это будет структура каталогов, и дикий имён для них в БД не предполагается, т.к. это не "сырой пользовательский ввод", а сформированные условно мной данные. Поэтому на всякие совсем уж дикие спецсимволы я поставлю принудительную замену на _ и всё.
- Как в PHP полностью корректно экранировать для Shell'а?, Кровосток, 04:29 , 22-Июл-22 (9) +1
> Вообще чисто с практической точки зрения, попробую сегодня создать такое имя и > с ним проверить кавычки на месте. Достаточно ли будет например в > исходном имени (пути) заменить все ' на \' и оставить неэкранированные > лишь те которые обрамляют аргумент, т.е. > ln -s 'ПУТЬ_\'ЭКРАНИРОВАНЫЙ\'_С_КАВЫЧКАМИ.jpg' 'КУДА_НАДО.jpg' Не сработало. Т.е. создав файл с кавычкой в имени, не удаётся это имя ни просто поместить в кавычки, ни даже поместить в кавычки, экранировав "именную" кавычку как \' Короче видимо можно помещать в кавычки, но вот от жоских экранируемых символов лучше просто предварительно избавляться, чтобы их принципиально в именах файлов и каталогов не было.
- Как в PHP полностью корректно экранировать для Shell'а?, Ann None, 16:26 , 22-Июл-22 (12) +1
>[оверквотинг удален] >> с ним проверить кавычки на месте. Достаточно ли будет например в >> исходном имени (пути) заменить все ' на \' и оставить неэкранированные >> лишь те которые обрамляют аргумент, т.е. >> ln -s 'ПУТЬ_\'ЭКРАНИРОВАНЫЙ\'_С_КАВЫЧКАМИ.jpg' 'КУДА_НАДО.jpg' > Не сработало. Т.е. создав файл с кавычкой в имени, не удаётся это > имя ни просто поместить в кавычки, ни даже поместить в кавычки, > экранировав "именную" кавычку как \' > Короче видимо можно помещать в кавычки, но вот от жоских экранируемых символов > лучше просто предварительно избавляться, чтобы их принципиально в именах файлов и > каталогов не было.ln -s touch 'bloodstream'\''s file.txt' touch 'bloodstream'\''s link.txt'
- Как в PHP полностью корректно экранировать для Shell'а?, Аноним, 14:47 , 22-Июл-22 (10)
> Собственно как организовать эту HOW_TO_ESC()?getenv/setenv, я так в шелле пихаю аргументы в awk и там уже достаю нетронутыми. И места не будет занимать.
- Как в PHP полностью корректно экранировать для Shell'а?, Аноним, 14:53 , 22-Июл-22 (11) +1
>> Собственно как организовать эту HOW_TO_ESC()? > getenv/setenv, я так в шелле пихаю аргументы в awk и там уже > достаю нетронутыми. И места не будет занимать.А если у тебя там какая-нибудь магия с цонтрол флоў, вызов шелла делается методом "закат солнца вручную" с помощью вилки/экзекуции. Или нереста, нерест позволяет указывать это икринкам.
|