Ich habe diesen PHP-Code:
function ShowFileExtension($filepath)
{
preg_match('/[^?]*/', $filepath, $matches);
$string = $matches[0];
$pattern = preg_split('/\./', $string, -1, PREG_SPLIT_OFFSET_CAPTURE);
if(count($pattern) > 1)
{
$filenamepart = $pattern[count($pattern)-1][0];
preg_match('/[^?]*/', $filenamepart, $matches);
return strtolower($matches[0]);
}
}
Wenn ich eine Datei mit dem Namen habe my.zip
, wird diese Funktion zurückgegeben .zip
.
Ich möchte das Gegenteil tun, ich möchte, dass die Funktion my
ohne die Erweiterung zurückkehrt.
Die Datei ist nur eine Zeichenfolge in einer Variablen.
Antworten:
Das alles ist nicht nötig. Schauen Sie sich pathinfo () an , es gibt Ihnen alle Komponenten Ihres Pfades.
Beispiel aus dem Handbuch:
Ausgabe des Codes:
Und alternativ können Sie nur bestimmte Teile erhalten wie:
quelle
basename
. Keine falsche Benennung.Alternativ
pathinfo()
können Sie verwendenbasename()
- Gibt die Dateinamenkomponente des Pfads zurückBeispiel aus dem PHP-Handbuch
Sie müssen die Erweiterung kennen, um sie im Voraus entfernen zu können.
Da Ihre Frage jedoch darauf hindeutet, dass Sie die Erweiterung benötigen und den Basisnamen , würde ich Pekkas Antwort als die nützlichste wählen , da sie Ihnen alle gewünschten Informationen über den Pfad und die Datei mit einem einzigen Muttersprachler liefert Funktion.
quelle
basename
, aberpathinfo
wie auf der seite gezeigt.https://php.net/manual/en/function.pathinfo.php
Einfacher Funktionstest: https://ideone.com/POhIDC
quelle
basename
;-)PATHINFO_FILENAME
nichtPATHINFO_EXTENSION
...filename
es keine Verlängerungbasename
gibt, muss einige sadistische Tendenzen haben ...Ein anderer Ansatz ist die Verwendung regulärer Ausdrücke.
Dies wird von der letzten Periode
.
bis zum Ende der Zeichenfolge entfernt.quelle
$fileName
die dazu führen könnten, dass die Engine in exponentieller (oder schlechterer) Zeit läuft. Unter der Annahme, dass wir die Interna dieser spezifischen Regex-Engine vollständig analysiert und theoretisch bewiesen haben, dass sie gegenüber allen möglichen Werten robust$fileName
ist, ist der Code immer noch nicht willkürlich auf eine andere Plattform portierbar, auf der eine andere Implementierung der Regex-Engine vorhanden ist.Wenn die Erweiterung nicht bekannt ist, verwenden Sie diese Lösung
PHP MAN Funktion pathinfo
quelle
pathinfo
. Dies wird OP dabei helfen, dieShowFileExtension
Methode zu verbessern, und bietet jedem, der versucht, diese Antwort zu finden, zusätzliche Informationen. Auch eine kleine Beschreibung würde nicht in die Irre gehen ...@Gordon Basisname funktioniert gut, wenn Sie die Erweiterung kennen, wenn Sie nicht explodieren können:
quelle
pathinfo
, weshalb ichbasename
nur als Alternative angegeben habe. Es besteht keine Notwendigkeit,pathinfo
mit Regex oder neu zu erfindenexplode
.end(explode(".", $file));
gibt Ihnen die Erweiterung, nicht den Dateinamen.Fast alle der oben genannten Lösungen haben den angezeigten Dateinamen von der Variablen $ path
Das folgende Snippet zeigt den aktuell ausgeführten Dateinamen ohne Erweiterung an
Erläuterung
quelle
Es ist nicht nötig, viel Code zu schreiben. Auch dies kann nur durch eine Codezeile erfolgen. Siehe hier
Unten finden Sie den einzeiligen Code, der nur den Dateinamen zurückgibt und den Erweiterungsnamen entfernt:
Es wird gedruckt
Quelle: Entfernen Sie die Erweiterung und geben Sie nur den Dateinamen in PHP zurück
quelle
@fire Wenn der Dateiname Punkte verwendet, können Sie die falsche Ausgabe erhalten. Ich würde die @ Gordon-Methode verwenden, aber auch die Erweiterung erhalten, sodass die Basename-Funktion mit allen Erweiterungen wie folgt funktioniert:
quelle
in meinem Fall benutze ich unten. Es ist mir egal, wie weit es reicht. : D Ich denke, es wird dir helfen
quelle
$extenion
Du kannst das schreiben
Diese geben das aktuelle Element des Arrays zurück, wenn es zuvor nicht verwendet wurde.
quelle
Kurz
quelle
b.php
und i ausgeführta.php
habenrequire('b.php')
. Dann wird wieb
statta
Dateiname ohne Dateierweiterung, wenn Sie diese Erweiterung nicht kennen:
$basename = substr($filename, 0, strrpos($filename, "."));
quelle
Wenn Sie nicht wissen, welche Erweiterung Sie haben, können Sie Folgendes versuchen:
Arbeiten mit allen Möglichkeiten:
quelle
Ihre Antwort ist unter der perfekten Lösung, um die Dateierweiterung in PHP zu verbergen.
quelle
Die vorhandenen Lösungen schlagen fehl, wenn eine Erweiterung mehrere Teile enthält. Die folgende Funktion funktioniert für mehrere Teile, einen vollständigen Pfad oder nur einen Dateinamen:
quelle
Dies gibt nur den Dateinamen ohne Erweiterung in 1 Zeile zurück:
quelle