Ticket #7372: plugin_data.7372.diff
| File plugin_data.7372.diff, 3.8 KB (added by santosj, 4 years ago) |
|---|
-
plugin.php
7 7 */ 8 8 9 9 /** 10 * plugin_get_contents() -Retrieve enough of the plugin file to get plugin data.10 * Retrieve enough of the plugin file to get plugin data. 11 11 * 12 12 * Some users have issues with opening large files and manipulating the 13 13 * contents for want is usually the first 1kiB or 2kiB. This function 14 14 * stops pulling in the plugin contents when it has all of the required 15 15 * plugin data. 16 16 * 17 * It also adds a little bit of padding for fudging the version info18 * and to make sure that we grab absolutely everything, in case of a19 * long description.17 * The first 8kiB of the file will be pulled in and if the plugin data is not 18 * within that first 8kiB, then the plugin author should correct their plugin 19 * and move the plugin data headers to the top. 20 20 * 21 21 * The plugin file is assumed to have permissions to allow for scripts to 22 22 * read the file. This is not checked however and the file is only opened 23 23 * for reading. 24 24 * 25 25 * @link http://trac.wordpress.org/ticket/5651 Purpose of function. 26 * @link http://trac.wordpress.org/ticket/7372 Optimization of function. 26 27 * @since 2.7.0 27 * @uses plugin_has_required_fields() Checks for all of the required plugin28 * data fields.29 28 * 30 29 * @param string $plugin_file Path to plugin file to open 31 30 * @return string Plugin file contents retrieved … … 35 34 // We don't need to write to the file, so just open for reading. 36 35 $fp = fopen($plugin_file, 'r'); 37 36 38 // Store the contents of the plugin file here.39 $contents = '';37 // Pull only the first 8kiB of the file in. 38 $contents = fread( $fp, 8192 ); 40 39 41 // Keep reading the contents of the file until End of File is42 // 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 descriptions47 // and grabbing any optional plugin data, not checked for.48 if( !feof($fp) )49 $contents .= fread( $fp, 512 );50 51 40 // PHP will close file handle, but we are good citizens 52 41 fclose($fp); 53 42 return $contents; 54 43 } 55 44 56 45 /** 57 * plugin_has_required_fields() - Checks plugin contents for required plugin data46 * Parse the plugin contents to retrieve plugin's metadata. 58 47 * 59 * @since 2.7.060 * @usedby plugin_get_contents()61 *62 * @param string $plugin_contents Plugin file contents63 * @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 metadata81 *82 48 * The metadata of the plugin's data searches for the following in the plugin's 83 49 * header. 84 50 * … … 104 70 * 'Title' - Title of the plugin and the link to the plugin's web site. 105 71 * 'Description' - Description of what the plugin does and/or notes 106 72 * from the author. 107 * 'Author' - The author's name and web site link. 73 * 'Author' - The author's name 74 * 'AuthorURI' - The authors web site address. 108 75 * 'Version' - The plugin version number. 76 * 'PluginURI' - Plugin web site address. 77 * 'TextDomain' - Plugin's text domain for localization. 78 * 'DomainPath' - Plugin's relative directory path to .mo files. 109 79 * 110 80 * @param string $plugin_file Path to the plugin file 111 81 * @return array See above for description.
