Поэтому я пытался заставить эти обратные ссылки работать, но я не могу понять это ради своей жизни.
В настоящее время у меня есть эта строка <% size_../files/file.rar %>
и мне нужно заменить его на фактический размер файла.
Это то, что я до сих пор.
$oldStr = "<% size_../files/file.rar %>";
$newStr = preg_replace("/<% size_(\w+) %>/", filesize("$1"), $oldStr);
В основном мне нужно получить шаблон (\ w +) и использовать его для использования функции размера файла.
\ w — это всего лишь [A-Za-z0-9_], поэтому вам нужно обрабатывать другие символы, пробелы и т. д. Либо добавьте все нужные вам типы, либо, возможно, сопоставьте все до «%>».
Вы можете использовать preg_replace, а затем получить размер файла или использовать preg_replace_callback.
Пара примеров:
$oldStr = "<% size_../files/file with spaces.rar %>";
$size1 = preg_replace_callback("/<% size_([\w\.\/\s]+) %>/",
function ($matches) {
return filesize($matches[1]);
},
$oldStr);
$newStr = preg_replace("/<% size_(.+) %>/", "$1", $oldStr);
if (is_file($newStr)) {
$size2 = filesize($newStr);
} else {
//not a file
}
Других решений пока нет …