// Other variables
$MAX_FILENAME_LENGTH = 260;
$file_name = $_FILES[$upload_name]['name'];
//echo "testing-".$file_name."<br>";
//$file_name = strtolower($file_name);
$file_extension = end(explode('.', $file_name)); //ERROR ON THIS LINE
$uploadErrors = array(
    0=>'There is no error, the file uploaded with success',
    1=>'The uploaded file exceeds the upload max filesize allowed.',
    2=>'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form',
    3=>'The uploaded file was only partially uploaded',
    4=>'No file was uploaded',
    6=>'Missing a temporary folder'
);

什么好主意吗?过了2天,还是卡住了。


当前回答

由于它在超过10年的时间里升起了一个旗帜,但工作得很好,并返回预期的值,一个小stfu操作符是你都在寻找的最好的坏习惯:

$file_extension = @end(explode('.', $file_name));

但是警告,不要在循环中使用,因为会影响性能。 最新版本的php 7.3+提供了array_key_last()和array_key_first()方法。

https://www.php.net/manual/en/function.array-key-last.php

                 uuuuuuu
             uu$$$$$$$$$$$uu
          uu$$$$$$$$$$$$$$$$$uu
         u$$$$$$$$$$$$$$$$$$$$$u
        u$$$$$$$$$$$$$$$$$$$$$$$u
       u$$$$$$$$$$$$$$$$$$$$$$$$$u
       u$$$$$$$$$$$$$$$$$$$$$$$$$u
       u$$$$$$"   "$$$"   "$$$$$$u
       "$$$$"      u$u       $$$$"
        $$$u       u$u       u$$$
        $$$u      u$$$u      u$$$
         "$$$$uu$$$   $$$uu$$$$"
          "$$$$$$$"   "$$$$$$$"
            u$$$$$$$u$$$$$$$u
             u$"$"$"$"$"$"$u
  uuu        $$u$ $ $ $ $u$$       uuu
 u$$$$        $$$$$u$u$u$$$       u$$$$
  $$$$$uu      "$$$$$$$$$"     uu$$$$$$
u$$$$$$$$$$$uu    """""    uuuu$$$$$$$$$$
$$$$"""$$$$$$$$$$uuu   uu$$$$$$$$$"""$$$"
 """      ""$$$$$$$$$$$uu ""$"""
           uuuu ""$$$$$$$$$$uuu
  u$$$uuu$$$$$$$$$uu ""$$$$$$$$$$$uuu$$$
  $$$$$$$$$$""""           ""$$$$$$$$$$$"
   "$$$$$"                      ""$$$$""
     $$$"                         $$$$"

其他回答

将爆炸的结果赋值给一个变量,并将该变量传递给end:

$tmp = explode('.', $file_name);
$file_extension = end($tmp);

问题是,这个结束需要一个引用,因为它修改了数组的内部表示(即它使当前元素指针指向最后一个元素)。

爆炸的结果('。`, $file_name)不能转换为引用。这是PHP语言中的一个限制,可能是出于简单的原因。

将爆炸()中的数组保存到一个变量中,然后在这个变量上调用end():

$tmp = explode('.', $file_name);
$file_extension = end($tmp);

btw:我使用这段代码来获得文件扩展名:

$ext = substr( strrchr($file_name, '.'), 1);

其中STRRCHR提取最后一个字符串之后的字符串。substr截断了。

试试这个:

$parts = explode('.', $file_name);
$file_extension = end($parts);

原因是end的参数是通过引用传递的,因为end通过将其内部指针前进到final元素来修改数组。如果没有传入变量,则没有引用可以指向的对象。

更多信息请参见PHP手册的末尾。

结束(…[爆炸”。', $file_name)])从PHP 5.6开始工作。这在RFC中有记录,但PHP文档本身没有记录。

首先,您必须像这样将值存储在变量中

$value = explode("/", $string);

然后你可以使用end函数从这样的数组中获取最后一个索引

echo end($value);

我希望这对你有用。