Я заметил, что phar: // wrapper будет игнорировать вопросительный знак ("?") В имени файла, но "?" в zip архиве имя может быть распознано правильно. Как:
$ echo "this is test.js" > "test.js"
$ echo "this is test.js?ver=1.3.1" > "test.js?ver=1.3.1"
$ zip -r "archive?.zip" ./
adding: test.js?ver=1.3.1 (stored 0%)
adding: test.js (stored 0%)
Затем, чтобы прочитать файлы в архиве? .Zip с phar: // wrapper
<?php
$dir = "phar://archive?.zip";
$cdr = scandir($dir);
print_r($cdr);
foreach ($cdr as $fname) {
$file = $dir . "/" . $fname;
echo $file . " => " . file_get_contents($file);
}
Вывод:
Array
(
[0] => test.js
[1] => test.js?ver=1.3.1
)
phar://archive?.zip/test.js => this is test.js
phar://archive?.zip/test.js?ver=1.3.1 => this is test.js
Как вы видите вывод "phar: // archive? .zip / test. js? ver = 1.3.1" - это не содержимое "test. js? ver = 1.3.1", а "test. js" .
Я знаю, что допустимыми расширениями архива phar являются "tar", "zip" и "phar". Поэтому строку перед .zip можно рассматривать как имя файла даже со специальными символами.
Обратите внимание, что я нашел это: Phar: // потоковая обертка с пробелом в имени файла , но Я получил тот же вывод с urlencode phar://archive?.zip/test.js%3Fver=1.3.1
.
Мои вопросы:
- Как обрабатывается вопросительный знак в имени файла? Точно так же, как параметры HTTP или напрямую игнорируется?
- Возможно ли прочитать содержимое "test. js? Ver = 1.3.1" вместо "test. js"?