Я пытаюсь написать файл 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). Я тестировал свой код локально, и он работает, но я не могу заставить его открыть этот файл на удаленном сервере. У меня нет корневого доступа к нему, поэтому я не могу изменять разрешения на что-либо до httpdocs.
Я должен также упомянуть, что fopen включен на сервере.
EDIT: allow_url_fopen включен, но allow_url_include отключен.
Кто-нибудь знает, в чем моя проблема?
благодаря
Попробуйте использовать абсолютный путь (полный путь), а также другие проверки:
$file = 'home/my/path/uploads/producers.xml'; //Absolute path if(is_file($file) && is_readable($file)){ $open = fopen($file, 'w') or die ("File cannot be opened."); fwrite($open, $xml->asXML()); fclose($open); }