I get an error when trying to update an XML file with asXML(). The script uses SimpleXMLElement to load the xml file and change the data.
The error seems about permissions. The folder and the file have read write permission.
Warning: SimpleXMLElement::asXML(communities.xml) simpleelement.asxml failed to open stream: permission denied in c:\path\make_update.php.
PHP script
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
function make_update( $nodeid, $name, $top, $left, $width, $height ) {
$nodes = new SimpleXMLElement('communities.xml', null, true);
$returnArray = $nodes->xpath("//COMMUNITY[@ID='$nodeid']");
$node = $returnArray[0];
$node->TOP = $top;
$nodes->asXML('communities.xml');
return $node->TOP;
}
echo make_update(trim($_REQUEST['nodeid']),trim($_REQUEST['name']),trim($_REQUEST['top']),trim($_REQUEST['left']),trim($_REQUEST['width']),trim($_REQUEST['height']));
?>
In other scripts I load the xml file with DOMDocument and save with $dom->save('file.xml');. Is there a difference between SimpleXMLELement and DOMDOcument or between asXML() and save() that explains this?
UPDATE 1
The php script is called through ajax from javascript called in a dynamically created div. If the div isn’t static in the page, could that cause permission issues?
UPDATE 2
More details about how this script is called… I have draggable divs. When dragging stops, I call a javascript function that makes the ajax call. That’s one important difference between the behavior for this script and the other ones where there aren’t any permission problems. In this structure, does the PHP script have different permissions than when called by a user-defined function in the HTML page?
$('#dragdiv').draggable({ stop: function(event, ui) { update_div($nodeid) } });
Since several php scripts don’t have that permission problem, there must be a link to how the script is called from the draggable function.
No.
Again, no.
The error is descriptive, if concise. The PHP script above does not have the necessary filesystem permissions to write that file at the location requested. Without knowing more details, and moving into teach-someone-to-debug-their-scripts mode, answers here will only repeat that sentiment.
A good starting point would be to go and have a look what the permissions on the file actually are, and compare that to the rights available to the PHP script.