// 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天,还是卡住了。


当前回答

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

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

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

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

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

其他回答

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

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

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

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

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

PHP抱怨是因为end()期望对它想要更改的内容(只能是变量)的引用。但是,您可以直接将爆炸()的结果传递给end(),而不需要先将其保存到变量中。当explosion()返回您的值时,它只存在于内存中,没有变量指向它。不能创建对不存在的东西(或内存中未知的东西)的引用。

或者换句话说:PHP不知道你给他的值是直接的值还是指向值的指针(指针也是一个变量(整数),它存储了内存的偏移量,也就是实际值所在的位置)。PHP希望这里总是有一个指针(引用)。

但是因为这在PHP 7中仍然只是一个通知(甚至没有被弃用),你可以保存忽略通知并使用忽略操作符,而不是完全取消激活通知的错误报告:

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

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

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

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

echo end($value);

我希望这对你有用。

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

就像你不能立即索引数组一样,你也不能对它调用end。首先将它赋值给一个变量,然后调用end。

$basenameAndExtension = explode('.', $file_name);
$ext = end($basenameAndExtension);