从我的WordPress插件写入文件

Yar*_*rin 8 php wordpress file-io

我为我的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);
Run Code Online (Sandbox Code Playgroud)

我收到以下调试错误:

警告:file_put_contents(HTTP://localhost/wp_mysite/wp-content/plugins/my-plugin/test.xml)function.file-把-内容]:未能打开流:HTTP包装不支持写连接在/第53行的Applications/MAMP/htdocs/wp_mysite/wp-content/plugins/my-plugin/my-plugin.php

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

谢谢-

hak*_*kre 12

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

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

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

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

  • @Blowsie:不,不是这样的CONSTANT,而是类似的东西.请看这里的"大图":http://codex.wordpress.org/Determining_Plugin_and_Content_Directories (2认同)