このPHPコードがあります:
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]);
}
}
my.Zip
という名前のファイルがある場合、この関数は.Zip
を返します。
私は逆をしたい、関数が拡張子なしでmy
を返すようにしたい。
ファイルは変数内の単なる文字列です。
その必要はありません。 pathinfo() をチェックすると、パスのすべてのコンポーネントが表示されます。
マニュアルの例:
$path_parts = pathinfo('/www/htdocs/index.html');
echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n"; // filename is only since PHP 5.2.0
コードの出力:
/www/htdocs
index.html
html
index
または、次のような特定の部分のみを取得できます。
echo pathinfo('/www/htdocs/index.html', PATHINFO_EXTENSION); // outputs html
pathinfo()
の代替として、次を使用できます。
basename()
—パスのファイル名コンポーネントを返しますPHPマニュアルの例
$path = "/home/httpd/html/index.php";
$file = basename($path); // $file is set to "index.php"
$file = basename($path, ".php"); // $file is set to "index"
ただし、事前に削除するには拡張機能を知っている必要があります。
しかし、あなたの質問は拡張子とベースネームを取得する必要があることを示唆しているので、私は ペッカの答え として投票します最も便利なのは、単一のネイティブ関数を使用してパスとファイルについて必要な情報を提供するためです。
https://php.net/manual/en/function.pathinfo.php
pathinfo($path, PATHINFO_FILENAME);
簡単な機能テスト: https://ideone.com/POhIDC
別のアプローチは、正規表現を使用することです。
$fileName = basename($filePath);
$fileNameNoExtension = preg_replace("/\.[^.]+$/", "", $fileName);
これにより、最後の期間.
から文字列の終わりまでが削除されます。
拡張子がわからない場合は、このソリューションを使用してください
pathinfo('D:/dir1/dir2/fname', PATHINFO_FILENAME); // return "fname"
pathinfo('D:/dir1/dir2/fname.php', PATHINFO_FILENAME); // return "fname"
pathinfo('D:/dir1/dir2/fname.jpg', PATHINFO_FILENAME); // return "fname"
pathinfo('D:/dir1/dir2/fname.jpg', PATHINFO_DIRNAME) . '/' . pathinfo('D:/dir1/dir2/fname.jpg', PATHINFO_FILENAME); // return "D:/dir1/dir2/fname"
上記のほとんどすべてのソリューションには、変数$ pathからファイル名を取得する方法が示されています
以下のスニペットは現在の実行ファイル名を拡張子なしで取得
echo pathinfo(basename($_SERVER['SCRIPT_NAME']), PATHINFO_FILENAME);
説明
$ _SERVER ['SCRIPT_NAME']には、現在のスクリプトのパスが含まれています。
@Gordon basenameは、拡張子を知っていれば問題なく機能します。
$filename = end(explode(".", $file));
たくさんのコードを書く必要はありません。 1行のコードだけでも実行できます。 こちら をご覧ください
以下は、ファイル名のみを返し、拡張子名を削除する1行のコードです。
<?php
echo pathinfo('logo.png')['filename'];
?>
印刷します
logo
私の場合、以下を使用します。私はその延長が何であるか気にしません。 :D私はそれがあなたを助けると思う
$exploded_filepath = explode(".", $filepath_or_URL);
$extension = end($exploded_filepath);
echo basename($filepath_or_URL, ".".$extension ); //will print out the the name without extension.
@fireは、ファイル名にドットが使用されている場合、間違った出力を取得する可能性があります。 @Gordonメソッドを使用しますが、拡張子も取得するため、basename関数は次のようにすべての拡張子で機能します。
$path = "/home/httpd/html/index.php";
$ext = pathinfo($path, PATHINFO_EXTENSION);
$file = basename($path, ".".$ext); // $file is set to "index"
これを書くことができます
$filename = current(explode(".", $file));
これらは、以前に使用されていない場合、配列の現在の要素を返します。
ショート
echo pathinfo(__FILE__)['filename']; // since php 5.2
拡張子がわからない場合のファイル拡張子のないファイル名:
$basename = substr($filename, 0, strrpos($filename, "."));
使用している拡張機能がわからない場合は、これを試すことができます。
$ext = strtolower(substr('yourFileName.ext', strrpos('yourFileName.ext', '.') + 1));
echo basename('yourFileName.ext','.'.$ext); // output: "youFileName" only
すべての可能性を扱う:
image.jpg // output: "image"
filename.image.png // output: "filename.image"
index.php // output: "index"
あなたの答えは、PHPでファイル拡張子を隠すための完璧な解決策の下です。
<?php
$path = "http://$_SERVER[HTTP_Host]$_SERVER[REQUEST_URI]";
echo basename($path, ".php");
?>
拡張機能に複数のパーツがある場合、既存のソリューションは失敗します。以下の関数は、複数の部分、フルパスまたは単なるファイル名に対して機能します:
function removeExt($path)
{
$basename = basename($path);
return strpos($basename, '.') === false ? $path : substr($path, 0, - strlen($basename) + strlen(explode('.', $basename)[0]));
}
echo removeExt('https://example.com/file.php');
// https://example.com/file
echo removeExt('https://example.com/file.tar.gz');
// https://example.com/file
echo removeExt('file.tar.gz');
// file
echo removeExt('file');
// file
これは、1行に拡張子のないファイル名のみを返します。
$path = "/etc/sudoers.php";
print array_shift(explode(".", basename($path)));
// will print "sudoers"
$file = "file_name.php";
print array_shift(explode(".", basename($file)));
// will print "file_name"