Changeset 8402
- Timestamp:
- 07/22/2008 07:18:07 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/wp-admin/includes/plugin.php (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-admin/includes/plugin.php
r8368 r8402 8 8 9 9 /** 10 * plugin_get_contents() - Retrieve enough of the plugin file to get plugin data. 11 * 12 * Some users have issues with opening large files and manipulating the 13 * contents for want is usually the first 1kiB or 2kiB. This function 14 * stops pulling in the plugin contents when it has all of the required 15 * plugin data. 16 * 17 * It also adds a little bit of padding for fudging the version info 18 * and to make sure that we grab absolutely everything, in case of a 19 * long description. 20 * 21 * The plugin file is assumed to have permissions to allow for scripts to 22 * read the file. This is not checked however and the file is only opened 23 * for reading. 24 * 25 * @link http://trac.wordpress.org/ticket/5651 Purpose of function. 26 * @since 2.7.0 27 * @uses plugin_has_required_fields() Checks for all of the required plugin 28 * data fields. 29 * 30 * @param string $plugin_file Path to plugin file to open 31 * @return string Plugin file contents retrieved 32 */ 33 function plugin_get_contents($plugin_file) { 34 35 // We don't need to write to the file, so just open for reading. 36 $fp = fopen($plugin_file, 'r'); 37 38 // Store the contents of the plugin file here. 39 $contents = ''; 40 41 // Keep reading the contents of the file until End of File is 42 // reached, or we grabbed all of the required plugin data. 43 while( !feof($fp) && !plugin_has_required_fields($contents) ) 44 $contents .= fread( $fp, 1024 ); 45 46 // Make sure that any padding is adding for long descriptions 47 // and grabbing any optional plugin data, not checked for. 48 if( !feof($fp) ) 49 $contents .= fread( $fp, 512 ); 50 51 // PHP will close file handle, but we are good citizens 52 fclose($fp); 53 return $contents; 54 } 55 56 /** 57 * plugin_has_required_fields() - Checks plugin contents for required plugin data 58 * 59 * @since 2.7.0 60 * @usedby plugin_get_contents() 61 * 62 * @param string $plugin_contents Plugin file contents 63 * @return bool Whether contents has all plugin data. 64 */ 65 function plugin_has_required_fields($plugin_contents) { 66 $hasName = stripos($plugin_contents, 'plugin name:'); 67 $hasPluginURI = stripos($plugin_contents, 'plugin uri:'); 68 $hasDescription = stripos($plugin_contents, 'description:'); 69 $hasAuthor = stripos($plugin_contents, 'author:'); 70 $hasAuthorURI = stripos($plugin_contents, 'author uri:'); 71 72 if( false !== $hasName && false !== $hasPluginURI && false !== $hasDescription && 73 false !== $hasAuthor && false !== $hasAuthorURI) 74 return true; 75 76 return false; 77 } 78 79 /** 80 * get_plugin_data() - Parse the plugin contents to retrieve plugin's metadata 10 * Parse the plugin contents to retrieve plugin's metadata. 81 11 * 82 12 * The metadata of the plugin's data searches for the following in the plugin's 83 * header. 13 * header. All plugin data must be on its own line. For plugin description, it 14 * must not have any newlines or only parts of the description will be displayed 15 * and the same goes for the plugin data. The below is formatted for printing. 84 16 * 85 17 * <code> … … 93 25 * Text Domain: Optional. Unique identifier, should be same as the one used in 94 26 * plugin_text_domain() 95 * Domain Path: Optional. Only useful if the translations are located in a folder 96 * above the plugin's base path. For example, if .mo files are located in 97 * the locale folder then Domain Path will be "/locale/" and must have the 98 * first slash. Defaults to the base folder the plugin is located in. 27 * Domain Path: Optional. Only useful if the translations are located in a 28 * folder above the plugin's base path. For example, if .mo files are 29 * located in the locale folder then Domain Path will be "/locale/" and 30 * must have the first slash. Defaults to the base folder the plugin is 31 * located in. 99 32 * * / # Remove the space to close comment 100 33 * </code> … … 105 38 * 'Description' - Description of what the plugin does and/or notes 106 39 * from the author. 107 * 'Author' - The author's name and web site link. 40 * 'Author' - The author's name 41 * 'AuthorURI' - The authors web site address. 108 42 * 'Version' - The plugin version number. 43 * 'PluginURI' - Plugin web site address. 44 * 'TextDomain' - Plugin's text domain for localization. 45 * 'DomainPath' - Plugin's relative directory path to .mo files. 46 * 47 * Some users have issues with opening large files and manipulating the contents 48 * for want is usually the first 1kiB or 2kiB. This function stops pulling in 49 * the plugin contents when it has all of the required plugin data. 50 * 51 * The first 8kiB of the file will be pulled in and if the plugin data is not 52 * within that first 8kiB, then the plugin author should correct their plugin 53 * and move the plugin data headers to the top. 54 * 55 * The plugin file is assumed to have permissions to allow for scripts to read 56 * the file. This is not checked however and the file is only opened for 57 * reading. 58 * 59 * @link http://trac.wordpress.org/ticket/5651 Previous Optimizations. 60 * @link http://trac.wordpress.org/ticket/7372 Further and better Optimizations. 61 * @since 1.5.0 109 62 * 110 63 * @param string $plugin_file Path to the plugin file … … 112 65 */ 113 66 function get_plugin_data( $plugin_file ) { 114 $plugin_data = plugin_get_contents( $plugin_file ); 67 // We don't need to write to the file, so just open for reading. 68 $fp = fopen($plugin_file, 'r'); 69 70 // Pull only the first 8kiB of the file in. 71 $plugin_data = fread( $fp, 8192 ); 72 73 // PHP will close file handle, but we are good citizens. 74 fclose($fp); 75 115 76 preg_match( '|Plugin Name:(.*)$|mi', $plugin_data, $name ); 116 77 preg_match( '|Plugin URI:(.*)$|mi', $plugin_data, $uri );
Note: See TracChangeset
for help on using the changeset viewer.