Home > Article > Backend Development > Several ways to get file extensions in php
There are several ways to get file extensions in php. Friends in need can refer to them.
Method 1: function get_extension($file) { substr(strrchr($file, '.'), 1); } Method 2: function get_extension($file) { return substr($file, strrpos($file, '.')+1); } Method 3: function get_extension($file) { return end(explode('.', $file)); } Method 4: function get_extension($file) { $info = pathinfo($file); return $info['extension']; } Method 5: function get_extension($file) { return pathinfo($file, PATHINFO_EXTENSION); } The above methods all seem to work, especially methods 1 and 2. However, if you understand the second parameter of pathinfo, you will have doubts about the above method. If you think about it carefully, the first four methods all have various shortcomings. To obtain the file extension completely correctly, you must be able to handle the following three special situations. No file extension The path contains characters., such as /home/test.d/test.txt The path contains the character ., but the file has no extension. Such as /home/test.d/test Obviously: 1 and 2 cannot handle the third situation, and 3 cannot correctly handle the first and third situations. 4 is handled correctly, but when the extension is not present, a warning is issued. Only method 5 is the most correct method. By the way, take a look at the pathinfo method. The official website introduction is as follows: $file_path = pathinfo('/www/htdocs/your_image.jpg'); echo "$file_path ['dirname']\n"; echo "$file_path ['basename']\n"; echo "$file_path ['extension']\n"; echo "$file_path ['filename']\n"; // only in PHP 5.2+ It will return an array containing up to four elements, but there will not always be four. For example, if there is no extension, there will be no extension element, so the fourth method will detect the warning. But phpinfo also supports the second parameter. You can pass a constant to specify a certain part of the data to be returned: PATHINFO_DIRNAME - Directory PATHINFO_BASENAME - file name (including extension) PATHINFO_EXTENSION - extension PATHINFO_FILENAME - file name (without extension, PHP>5.2) The values of these four constants are 1, 2, 4, and 8 respectively. At first, I thought I could specify multiple ones through the OR operation: pathinfo($file, PATHINFO_EXTENSION | PATHINFO_FILENAME); Later I found out that it doesn't work, this will only return the smallest of several OR constants. That is, the smallest bit among the four flag bits is a constant. |