SimpleXML-> asXML ($ filePath) не удалось открыть доступ к потоку запрещен - PullRequest
0 голосов
/ 09 мая 2011

У меня есть класс, который обновляет XML-файл, однако, когда приходит время сохранить файл, я получаю сообщение об ошибке: SimpleXML-> asXML ($ filePath) не удалось открыть доступ к потоку запрещен.У меня никогда не было этой проблемы раньше, и я не могу найти много чего полезного на межсетях.

public static function CreateEntityConfig($database,$tables,$overwriteNodes = false) {
    if(!empty($database) && !empty($tables)) {
        $conn = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
        if(!$conn) { die('Could not connect: '.mysql_error()); }

        // check to see if database node exists and overwrite if $overwriteNodes set to true
        // else create new database node 
        mysql_select_db($database);
        if(self::NodeExists('database',array('name',$database))) {
            if($overwriteNodes) {
                self::RemoveNode('database', array('name',$database));
            } else {
                die($database.' node already exists');
            }
        } else {
            //echo '<br>type='.get_class(self::$_xml);
            $databaseNode = self::AddNode(self::$_xml, 'Database', array('name' => $database));
        }
        $tableNode = self::AddNode($databaseNode, 'Table', array('name' => $tables));

        $result = mysql_query('select * from '.$tables);
        if(!$result) { die('Query failed: '.  mysql_error()); }

        $i = 0;
        while($i < mysql_num_fields($result)) {
            $meta = mysql_fetch_field($result, $i);
            if($meta) {
                self::AddNode(
                    $tableNode,
                    'Field',
                    array(
                        'name' => $meta->name,
                        'not_null' => $meta->not_null,
                        'type' => $meta->type
                    )
                );
            } else {
                die('Unable to fetch meta information for '.$tables);
            }
            $i++;
        }
        mysql_free_result($result);
        //if(!self::$_xml->asXML()) { die('Unable save xml to file'); }
        echo self::$_xml->asXML(self::$_xmlFilePath);
    } else { die('Database and Table arguments required'); }
    mysql_close();
    echo self::$_xmlFilePath.' successfully built.';
}

Хотя ответ Фила был не совсем верным, он помог мне найти решение, которое работало для меня.Вот объяснение того, что я сделал - посмотрите на первый ответ https://superuser.com/questions/19318/how-can-i-give-write-access-of-a-folder-to-all-users-in-linux

спасибо за любую помощь, B

1 Ответ

0 голосов
/ 09 мая 2011

У вашего сценария нет разрешения на запись по любому пути, указанному в self::$_xmlFilePath.

Не зная больше о вашей среде, трудно дать больше советов.

Это Windowsили файловая система Linux / Unix / Mac?

Под каким пользователем работает PHP?

Какому пользователю принадлежит self::$_xmlFilePath и каковы разрешения на этот путь?

ОБНОВЛЕНИЕ

Я думаю, что ваша лучшая ставка, учитывая, что это выглядит только для локальной разработки, - сделать папку назначения доступной для записи во всем мире.Вы должны быть в состоянии сделать это через Nautilus или командную строку

chmod o+w /path/to/folder

Обратите внимание, что это не хорошее решение для производственной среды

...