PHP: dosya uzantısı-iyi yolu olmadan dosya?

4 Cevap

Ben uzantısı olmadan bir dizin dışında dosya çekmeye çalışıyorum.

Ben aşağıdaki ile yolumu yoluyla kludging ediyorum:

foreach ($allowed_files as $filename) { 
  $link_filename = substr(basename($filename), 4, strrpos(basename($filename), '.'));
  $src_filename = substr($link_filename, 0, strrpos($link_filename) - 4);
  echo $src_filename;
}

...But that can't work if the extension string length is more than 3. I looked around in the PHP docs to no avail.

4 Cevap

list ($ dosya) = ($ dosya '.') patlayabilir;

Bu deneyin

function file_extension($filename){
    $x = explode('.', $filename);
    $ext=end($x);
    $filenameSansExt=str_replace('.'.$ext,"",$filename);
    return array(
        "filename"=>$filenameSansExt,
        "extension"=>'.'.$ext,
        "extension_undotted"=>$ext
        );
}

kullanımı:

$filenames=array("file1.php","file2.inc.php","file3..qwe.e-rt.jpg");
foreach($filenames as $filename){
    print_r(file_extension($filename));
    echo "\n------\n";

}

çıktı

Array
(
    [filename] => file1
    [extension] => .php
    [extension_undotted] => php
)

------
Array
(
    [filename] => file2.inc
    [extension] => .php
    [extension_undotted] => php
)

------
Array
(
    [filename] => file3..qwe.e-rt
    [extension] => .jpg
    [extension_undotted] => jpg
)

------

Bu deneyin:

$noExt = preg_replace("/\\.[^.]*$/", "", $filename);

Edit in response to cletus's comment:
You could change it in one of a few ways:

$noExt = preg_replace("/\\.[^.]*$/", "", basename($filename));

// or

$noExt = preg_replace("/\\.[^.\\\\\\/]*$/", "", $filename);

Yes, PHP needs regex literals...