PHP如何用于解析主题和插件的注释/标头? [英] How is PHP used to parse comments / headers for themes and plugins?
问题描述
WordPress插件和主题的顶部注释如下:
Wordpress plugins and themes have comments like these at the top:
/**
* @package Akismet
*/
/*
Plugin Name: Akismet
Plugin URI: http://akismet.com/?return=true
Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from comment and trackback spam</strong>. It keeps your site protected from spam even while you sleep. To get started: 1) Click the "Activate" link to the left of this description, 2) <a href="http://akismet.com/get/?return=true">Sign up for an Akismet API key</a>, and 3) Go to your <a href="admin.php?page=akismet-key-config">Akismet configuration</a> page, and save your API key.
Version: 2.5.6
Author: Automattic
Author URI: http://automattic.com/wordpress-plugins/
License: GPLv2 or later
*/
当您在管理界面中访问插件页面时,将列出插件,如下所示:
And when you visit the plugins' page in the admin interface, the plugins are listed like this:
screenshot-with-shadow.png http://img854.imageshack.us/img854/4526/screenshotwithshadow.png
这是文档的标准语法吗?我假设它在插件文件上执行 file_get_contents
来读取它们,但是Wordpress如何将其解析为可操作的标准化信息以在PHP中使用?
Is that a standard syntax for documentation? I'm assuming it does a file_get_contents
on the plugin files to read them, but how does Wordpress parse that into manipulatable, standardized information to be used in PHP?
推荐答案
请参见 get_plugin_data()
在 wp-admin/includes/plugin.php
中,用于WordPress解析器.更具体地说,提取发生在 wp的
: get_file_data()
中-includes/functions.php
See get_plugin_data()
in wp-admin/includes/plugin.php
for the WordPress parser.
More specifically the extraction happens in get_file_data()
of wp-includes/functions.php
:
function get_file_data( $file, $default_headers, $context = '' ) {
// We don't need to write to the file, so just open for reading.
$fp = fopen( $file, 'r' );
// Pull only the first 8kiB of the file in.
$file_data = fread( $fp, 8192 );
// PHP will close file handle, but we are good citizens.
fclose( $fp );
// Make sure we catch CR-only line endings.
$file_data = str_replace( "\r", "\n", $file_data );
if ( $context && $extra_headers = apply_filters( "extra_{$context}_headers", array() ) ) {
$extra_headers = array_combine( $extra_headers, $extra_headers ); // keys equal values
$all_headers = array_merge( $extra_headers, (array) $default_headers );
} else {
$all_headers = $default_headers;
}
foreach ( $all_headers as $field => $regex ) {
if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( $regex, '/' ) . ':(.*)$/mi', $file_data, $match ) && $ma
$all_headers[ $field ] = _cleanup_header_comment( $match[1] );
else
$all_headers[ $field ] = '';
}
在WP之外有类似的实现.参见如何可以设计插件系统以免浪费太多资源吗?例如.
There are similar implementations outside of WP. See How can plugin systems be designed so they don't waste so many resources? for an example.
这篇关于PHP如何用于解析主题和插件的注释/标头?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!