Запись в XML-файл с помощью fopen в WordPress

#php #xml #wordpress #fopen

#php #xml #wordpress #fopen

Вопрос:

Я пытаюсь выполнить запись в XML-файл в папке uploads в моем каталоге WordPress. Этот XML необходимо обновлять каждый раз, когда клиент обновляет или создает новую запись, используя созданный мной пользовательский post_type.

Вот код:

 <?
add_action( 'save_post', 'producers_xml' );

function producers_xml(){

 if ($_POST['post_type'] == 'producer') 
 {
   $xml = new SimpleXMLElement('<xml/>');
   $producers = get_posts( array( 'post_type'=>'producer', 'numberposts'=>-1 ) );

   $xml->addChild('producers');

   foreach($producers as $i=>$producer){
     $name = get_the_title($producer->ID);
     $owner = get_post_meta($producer->ID, '_producer_contact_name', true);
     $phone = get_post_meta($producer->ID, '_producer_phone', true);
     $fax = get_post_meta($producer->ID, '_producer_fax', true);
     $email = get_post_meta($producer->ID, '_producer_email', true);
     $website = get_post_meta($producer->ID, '_producer_website', true);
     $address = get_post_meta($producer->ID, '_producer_address', true);

     $xml->producers->addChild('producer');
     $xml->producers->producer[$i]->addChild('name', $name);
     $xml->producers->producer[$i]->addChild('owner', $owner);
     $xml->producers->producer[$i]->addChild('phone', $phone);
     $xml->producers->producer[$i]->addChild('fax', $fax);
     $xml->producers->producer[$i]->addChild('email', $email);
     $xml->producers->producer[$i]->addChild('website', $website);
     $xml->producers->producer[$i]->addChild('address', $address); 
 }

 $file = '../../../uploads/producers.xml';
 $open = fopen($file, 'w') or die ("File cannot be opened.");
 fwrite($open, $xml->asXML());
 fclose($open); 
}
  

}
?>

Проблема, с которой я сталкиваюсь, заключается в том, что он продолжает выдавать мне сообщение «Файл не может быть открыт». ошибка, которую я указал. Моя папка uploads (и все вложенные элементы) имеют полные разрешения (777). Я протестировал свой код локально, и он работает, но я не могу заставить его открыть этот файл на удаленном сервере. У меня нет root-доступа к нему, поэтому я не могу изменить разрешения на что-либо до httpdocs.

Я должен также упомянуть, что fopen включен на сервере.

РЕДАКТИРОВАТЬ: allow_url_fopen включен, но allow_url_include отключен.

Кто-нибудь знает, в чем моя проблема?

Спасибо

Ответ №1:

Попробуйте использовать абсолютный путь (full path), наряду с другими проверками см.:

  $file = 'home/my/path/uploads/producers.xml'; //Absolute path
if(is_file($file) amp;amp; is_readable($file)){
 $open = fopen($file, 'w') or die ("File cannot be opened.");
 fwrite($open, $xml->asXML());
 fclose($open); 
}
  

Комментарии:

1. Это сработало. Забавно, что решение кажется таким простым в ретроспективе. Спасибо!