Привет, я попробовал свой код локально, используя wampserver 3.2.0, и он работает нормально, однако, когда я загружаю его онлайн и запускаю, он дает другие результаты. Вот оно:
<?php
class Gallery {
// Name of the gallery, used to build folder path
private $name;
function __construct($name) {
$this->name = $name;
}
/*
* Returns the list of file names in a gallery folder
*/
public function getFileNames() {
$path = "../../images/$this->name";
if (is_dir($path)) {
$allFileNamesArray = preg_grep('/^([^.])/', scandir($path, SCANDIR_SORT_ASCENDING)); // preg-grep removes ".", ".." and hidden files
$filteredFileNamesArray = array();
// Building regular expression
$datePattern = "\[((19|20)\d\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])\]";
$tag = "[a-z]+(?:-[a-z]+)*";
$regroupmentPattern = "\[($tag)?\]";
$taglistPattern = "\[((?:$tag)?(?:;(?:$tag))*)\]";
$countryPattern = "\[([a-z]{2})\]";
$freePattern = "\[([^\[\]]*)\]";
$extensionPattern = "\.(jpg|png)";
$repetitionPattern = "(?:\(\d+\))?";
$fullPattern = "/^$datePattern$regroupmentPattern$taglistPattern$countryPattern$freePattern$freePattern$repetitionPattern$extensionPattern$/";
$nbMatches = 0;
$nbIgnored = 0;
$nbTotal = 0;
foreach ($allFileNamesArray as $fileName) {
$matches = array();
$doMatch = preg_match($fullPattern, $fileName, $matches, PREG_UNMATCHED_AS_NULL);
if ($doMatch) {
$filteredFileNamesArray[] = $fileName;
$nbMatches += 1;
}
else {
$nbIgnored += 1;
}
$nbTotal += 1;
}
return array(
"nbMatches" => $nbMatches,
"nbIgnored" => $nbIgnored,
"nbTotal" => $nbTotal,
"regex" => $fullPattern,
"fineNames" => $filteredFileNamesArray
);
}
else {
return false;
}
}
}
?>
Может ли это быть из-за того, что wamp использует php версию 7.3.12, а мой сервер использует версию 5.6 и, если да, как исправить мое регулярное выражение, чтобы оно работало в обоих?