从我的WordPress插件写入文件

时间:2011-06-28 11:28:41

标签: php file-io wordpress

我为我的WordPress网站编写了一个自定义插件,该插件依赖于从插件文件夹中的xml数据文件读取/写入。当我测试这个用于文件读/写的标准PHP代码时,它将允许我创建/写入位于wp-admin / level的文件,但不能创建/写入插件文件夹中的文件,尽管它可以从两者中读取。

$file = 'test.xml';  (Can write to this file)
$file = plugins_url()."/my-plugin/test.xml";  (Can read but not write to this file)
// Open the file to get existing content
$current = file_get_contents($file);
echo $current;
// Append a new person to the file
$current .= "<person>John Smith</person>\n";
// Write the contents back to the file
file_put_contents($file, $current);

我收到以下调试错误:

  

警告:   file_put_contents(HTTP://localhost/wp_mysite/wp-content/plugins/my-plugin/test.xml)   [function.file-put-contents]:失败   打开流:HTTP包装器没有   支持可写连接   /Applications/MAMP/htdocs/wp_mysite/wp-content/plugins/my-plugin/my-plugin.php   第53行

我目前正在本地MAMP服务器上运行它,但想要一个能让我在任何WordPress服务器上打包并发布插件的解决方案。什么是正确的方法?

谢谢 -

1 个答案:

答案 0 :(得分:11)

如果要写入文件,请不要通过HTTP访问它。直接访问它而不是读取和写入,因为它是访问文件的速度和最直接的方法。

要获取基本插件目录路径,请使用WP_PLUGIN_DIR常量:

$file = 'test.xml';  // (Can write to this file)
$file = WP_PLUGIN_DIR."/my-plugin/test.xml"; 
//      ^^^^^^^^^^^^^

由于性能原因以及HTTP不支持写入,这将阻止您使用完全不应使用的HTTP。但最重要的是,因为它是您可以访问的服务器上的文件,所以直接访问它。