我有一个更新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
感谢任何和所有的帮助, 乙
答案 0 :(得分:0)
您的脚本无权写入self::$_xmlFilePath
中的任何路径。
如果不了解您的环境,很难提供更多建议。
是Windows还是Linux / Unix / Mac文件系统?
哪个用户在PHP下运行?
哪个用户拥有self::$_xmlFilePath
以及该路径上的权限是什么?
<强>更新强>
我认为你最好的选择,考虑到这只是本地开发,将使目标文件夹成为可写的。您应该可以通过Nautilus或命令行
执行此操作chmod o+w /path/to/folder
请注意,这对于生产环境来说不是一个好的解决方案