Запись в файл из моего плагина WordPress - PullRequest
7 голосов
/ 28 июня 2011

Я написал собственный плагин для своего сайта WordPress, который полагается на чтение / запись из файла данных xml в папке плагина.Когда я тестирую этот стандартный PHP-код для чтения / записи файлов, он позволяет мне создавать / записывать файлы, расположенные на уровне wp-admin /, но не файлы в папке плагина, хотя он может считывать оба файла.

$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 Ответ

11 голосов
/ 28 июня 2011

Не обращайтесь к нему через HTTP, если вы хотите записать в файл. Вместо этого обращайтесь к нему напрямую как для чтения, так и для записи, поскольку это гораздо более быстрый и самый прямой способ доступа к файлу.

Чтобы получить путь к каталогу базового плагина, используйте константу WP_PLUGIN_DIR:

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

Это помешает вам использовать HTTP, который вообще не следует использовать из соображений производительности и из-за того, что HTTP не поддерживает запись. Но прежде всего, поскольку это файл на сервере, к которому у вас есть доступ, обращайтесь к нему напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...