接下来的事情有点复杂。你可以使用fopen
或file_get_contents
没有任何问题。
这是filesystem api. 它处理的是确定文件的所有权并返回正确的访问方式——大多数情况下,这只意味着正常的PHP函数(或direct 文件系统类)。
奥托有一个nice tutorial 在这个问题上,我复制/修改了它,以找出它是如何用于这个答案的。
基本上您使用request_filesystem_credentials
获取与文件系统交互的适当信息。这可能不是什么(例如,直接,请参阅上面的链接),也可能会向用户显示一个表单,以便他们可以输入FTP或SSH的用户名/密码。取决于服务器设置。
一些快速示例。让我们用一个简单的表单添加一个管理页面。
<?php
add_action(\'admin_menu\', \'wpse74395_add_menu_page\');
function wpse74395_add_menu_page()
{
add_options_page(
__(\'Filesystem\', \'wpse\'),
__(\'Filesystem\', \'wpse\'),
\'manage_options\',
\'wpse-filesystem\',
\'wpse74395_page_cb\'
);
}
function wpse74395_page_cb()
{
if(wpse74395_use_filesystem())
return;
?>
<div class="wrap">
<?php screen_icon(); ?>
<h2><?php _e(\'Filesystem Practice\', \'wpse\'); ?></h2>
<form method="post" action="">
<?php wp_nonce_field(\'wpse74395-nonce\'); ?>
<p><input name="save" type="submit" value="<?php esc_attr_e(\'Go!\', \'wpse\'); ?>" class="button-primary" /></p>
</form>
</div>
<?php
}
The
wpse74395_use_filesystem
功能:
<?php
function wpse74395_use_filesystem()
{
if(empty($_POST[\'save\']))
return false;
// can we do this?
check_admin_referer(\'wpse74395-nonce\');
// try to get the filesystem credentials.
$url = wp_nonce_url(admin_url(\'options-general.php?page=wpse-filesystem\'), \'wpse74395-nonce\');
if(false === ($creds = request_filesystem_credentials($url)))
{
// we didn\'t get creds...
// The user will see a form at this point, so stop the
// rest of the page.
return true;
}
// use WP_Filesystem to check initialize the global $wp_filesystem
if(!WP_Filesystem($creds))
{
// didn\'t work, try again!
request_filesystem_credentials($url);
return true;
}
global $wp_filesystem;
// get your file path
$fp = WP_CONTENT_DIR . \'/test.txt\';
// do your thing.
if($wp_filesystem->exists($fp))
{
$res = $wp_filesystem->get_contents($fp);
var_dump($res);
return true;
}
// nothing worked, try again.
return false;
}
这些评论应该有助于解释发生了什么。本质上:确保我们处于POST请求(表单提交)中,并且请求已签出(nonce验证)。从那里,我们将尝试获取文件系统凭据。如果我们没有得到任何,将显示一个表单来收集它们,因此请停止显示页面的其余部分。
仅通过给予request_filesystem_credentials
第一个论点,我们让WP决定我们需要使用什么方法。大多数情况下,这是直接的,用户不会看到任何东西。请注意request_filesystem_credentials
将尽一切可能在不询问用户的情况下获取这些内容--数据库选项、配置选项等。
一旦我们有了CRED,尝试初始化全局$wp_filesystem
对象具有WP_Filesystem
. 如果成功了,太棒了!如果没有,请再次尝试获取凭据。
如果一切正常,请使用$wp_filesystem
如你所需。它们都有一个一致的接口。这是上面的代码in a plugin.