在PHP fopen()中插入变量作为我的URL时出现问题
我正在尝试使我的xml文件URL动态化,以便多人可以同时使用我的站点和查询数据。为了做到这一点,我在XML文件前面插入了一个随机数php变量。由于某些原因,在尝试使用此变量时,我在创建和编写xml文件时遇到问题。当我使用像“wine.xml”这样的静态URL时,效果很好在PHP fopen()中插入变量作为我的URL时出现问题,php,ajax,fopen,Php,Ajax,Fopen,我正在尝试使我的xml文件URL动态化,以便多人可以同时使用我的站点和查询数据。为了做到这一点,我在XML文件前面插入了一个随机数php变量。由于某些原因,在尝试使用此变量时,我在创建和编写xml文件时遇到问题。当我使用像“wine.xml”这样的静态URL时,效果很好 $fp = fopen($randnumb.'wine.xml', 'w'); fwrite($fp, $string); fclose($fp); 我可能错了(
$fp = fopen($randnumb.'wine.xml', 'w');
fwrite($fp, $string);
fclose($fp);
我可能错了(所以任何人都可以纠正我)如果你有一个xml,并且想让很多人阅读它,为什么你必须复制多个副本
难道服务器不应该为许多人提供一个文件吗?如果我错了,并且您尝试了其他方法,那么这个php只能正常工作。这样,您就不必在php中查找错误
<?php
$fileName = rand().'file.xml';
$fp = fopen($fileName, 'w');
fwrite($fp, 'Hello!');
fclose($fp);
?>
<?php
$handle = fopen($fileName, "rb");
$contents = fread($handle, filesize($fileName));
print_r($contents);
fclose($handle);
?>
var-winexml=loadXMLDoc(“wine.xml”);
我明白了,
行吗。我不知道您对最终xml文件显示的偏好是什么,但是这个脚本有一些东西可以让您完成工作,只需根据您的需要进行调整即可
index.html和getXml.php
<html>
<head>
<script type="text/javascript">
var request = false;
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = false;
}
}
}
if (!request)
alert("Error initializing XMLHttpRequest!");
</script>
<script type="text/javascript">
var fileOption;
var fileName;
function runPhp(makeFile)
{
var url = "getXml.php";
fileOption = makeFile;
var params = "makeFile=" +makeFile+"";
request.open("POST", url, true);
//Some http headers must be set along with any POST request.
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
request.setRequestHeader("Content-length", params.length);
request.setRequestHeader("Connection", "close");
request.onreadystatechange = updatePage;
request.send(params);
}////////////////////
function getXml( )
{
if(fileName==null){alert('please click create file first');return;}
var url = fileName;
var params = null;
request.open("POST", url, true);
request.setRequestHeader("Connection", "close");
request.onreadystatechange = displayFile;
request.send(params);
}////////////////////
//You're looking for a status code of 200 which simply means okay.
function updatePage() {
if (request.readyState == 4) {
if (request.status == 200)
{
if(fileOption==1)
{fileName=request.responseText; return;}
document.getElementById('divResults').innerHTML=request.responseText;
document.getElementById('textareaResults').innerHTML=request.responseText;
}
else{
//alert("status is " + request.status);
}
}
}
function displayFile() {
if (request.readyState == 4) {
if (request.status == 200)
{
document.getElementById('textareaResults').innerHTML=request.responseText;
document.getElementById('divResults').innerHTML='File loaded in text area above.';
}
else{
//alert("status is " + request.status);
}
}
}
</script>
</head>
<body >
<span style="background-color:blue;color:yellow;"
onClick="runPhp(0)"/>
Click for Xml Results.<br>
(<font color=pink>I prefer this one!!!</font>)
</span><br><br>
<span style="background-color:blue;color:yellow;"
onClick="runPhp(1)"/>
Click to create an xml file.<br>
</span>
<span style="background-color:blue;color:yellow;"
onClick="getXml(1)"/>
Click to read the xml file.<br>
</span>
<textarea rows="10" cols="88" id="textareaResults">
</textarea>
<br><br>
<pre><div id="divResults"></div></pre>
<br><br>
</body>
</html>
<?PHP
mysql_connect('localhost', 'root','');
mysql_select_db("mysql");
$query="select * from help_category;";
$resultID = mysql_query($query ) or die("Data not found.");
$xml_output = "<?xml version=\"1.0\"?>\n";
$xml_output .= "<records>\n";
for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++){
$row = mysql_fetch_assoc($resultID);
$xml_output .= "\t<record>\n";
$xml_output .= "\t\t<help_category_id>" . $row['help_category_id'] . "</help_category_id>\n";
$xml_output .= "\t\t<name>" . $row['name'] . "</name>\n";
$xml_output .= "\t\t<parent_category_id>" . $row['parent_category_id'] . "</parent_category_id>\n";
$xml_output .= "\t</record>\n";
}
$xml_output .= "</records>";
if($_POST['makeFile']==0)
echo $xml_output;
else
{
$fileName = rand().'file.xml';
$fp = fopen($fileName, 'w');
fwrite($fp, $xml_output);
fclose($fp);
$dbq="\"";
echo $fileName;
}
?>
var请求=false;
试试{
请求=新的XMLHttpRequest();
}捕获(trymicrosoft){
试试{
请求=新的ActiveXObject(“Msxml2.XMLHTTP”);
}捕获(其他Microsoft){
试一试{
请求=新的ActiveXObject(“Microsoft.XMLHTTP”);
}捕获(失败){
请求=假;
}
}
}
如果(!请求)
警报(“初始化XMLHttpRequest时出错!”);
var期权;
var文件名;
函数runPhp(makeFile)
{
var url=“getXml.php”;
fileOption=makeFile;
var params=“makeFile=“+makeFile+”;
打开(“POST”,url,true);
//某些http头必须与任何POST请求一起设置。
setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded;字符集=utf-8”);
setRequestHeader(“内容长度”,参数长度);
setRequestHeader(“连接”、“关闭”);
request.onreadystatechange=updatePage;
请求发送(params);
}////////////////////
函数getXml()
{
如果(fileName==null){alert('请先单击创建文件');返回;}
var url=文件名;
var-params=null;
打开(“POST”,url,true);
setRequestHeader(“连接”、“关闭”);
request.onreadystatechange=displayFile;
请求发送(params);
}////////////////////
//你要找的状态码是200,这意味着一切正常。
函数updatePage(){
if(request.readyState==4){
如果(request.status==200)
{
如果(fileOption==1)
{fileName=request.responseText;return;}
document.getElementById('divResults').innerHTML=request.responseText;
document.getElementById('textareaResults')。innerHTML=request.responseText;
}
否则{
//警报(“状态为”+请求状态);
}
}
}
函数displayFile(){
if(request.readyState==4){
如果(request.status==200)
{
document.getElementById('textareaResults')。innerHTML=request.responseText;
document.getElementById('divResults').innerHTML='File装入上面的文本区域';
}
否则{
//警报(“状态为”+请求状态);
}
}
}
单击查看Xml结果。
(我更喜欢这个!!!)
单击以创建xml文件。
单击以读取xml文件。
$randnumb
的值是多少?在fopen调用之前立即执行var_dump($randnumb)
查看。Marc-$randnumb是通过$randnumb=rand()生成的随机数;你犯了什么样的错误?当您运行它时,这里会发生什么?php端没有错误。当我试图打开文件(找不到页面)时,在JS端遇到一个错误。我还尝试手动转到xml页面,但它不存在;1.我的XML文件是从SQL表动态创建的。因此,创建的每个xml文件都是根据每个用户的请求定制的。我没有正确地将会话放在开始位置();函数位于每页的顶部。我添加了这个函数,一切都正常了。
<?PHP
$dbq="\"";
echo 'var winexml=loadXMLDoc(',$dbq,$randnumb,'wine.xml',$dbq,');';
?>
<html>
<head>
<script type="text/javascript">
var request = false;
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = false;
}
}
}
if (!request)
alert("Error initializing XMLHttpRequest!");
</script>
<script type="text/javascript">
var fileOption;
var fileName;
function runPhp(makeFile)
{
var url = "getXml.php";
fileOption = makeFile;
var params = "makeFile=" +makeFile+"";
request.open("POST", url, true);
//Some http headers must be set along with any POST request.
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
request.setRequestHeader("Content-length", params.length);
request.setRequestHeader("Connection", "close");
request.onreadystatechange = updatePage;
request.send(params);
}////////////////////
function getXml( )
{
if(fileName==null){alert('please click create file first');return;}
var url = fileName;
var params = null;
request.open("POST", url, true);
request.setRequestHeader("Connection", "close");
request.onreadystatechange = displayFile;
request.send(params);
}////////////////////
//You're looking for a status code of 200 which simply means okay.
function updatePage() {
if (request.readyState == 4) {
if (request.status == 200)
{
if(fileOption==1)
{fileName=request.responseText; return;}
document.getElementById('divResults').innerHTML=request.responseText;
document.getElementById('textareaResults').innerHTML=request.responseText;
}
else{
//alert("status is " + request.status);
}
}
}
function displayFile() {
if (request.readyState == 4) {
if (request.status == 200)
{
document.getElementById('textareaResults').innerHTML=request.responseText;
document.getElementById('divResults').innerHTML='File loaded in text area above.';
}
else{
//alert("status is " + request.status);
}
}
}
</script>
</head>
<body >
<span style="background-color:blue;color:yellow;"
onClick="runPhp(0)"/>
Click for Xml Results.<br>
(<font color=pink>I prefer this one!!!</font>)
</span><br><br>
<span style="background-color:blue;color:yellow;"
onClick="runPhp(1)"/>
Click to create an xml file.<br>
</span>
<span style="background-color:blue;color:yellow;"
onClick="getXml(1)"/>
Click to read the xml file.<br>
</span>
<textarea rows="10" cols="88" id="textareaResults">
</textarea>
<br><br>
<pre><div id="divResults"></div></pre>
<br><br>
</body>
</html>
<?PHP
mysql_connect('localhost', 'root','');
mysql_select_db("mysql");
$query="select * from help_category;";
$resultID = mysql_query($query ) or die("Data not found.");
$xml_output = "<?xml version=\"1.0\"?>\n";
$xml_output .= "<records>\n";
for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++){
$row = mysql_fetch_assoc($resultID);
$xml_output .= "\t<record>\n";
$xml_output .= "\t\t<help_category_id>" . $row['help_category_id'] . "</help_category_id>\n";
$xml_output .= "\t\t<name>" . $row['name'] . "</name>\n";
$xml_output .= "\t\t<parent_category_id>" . $row['parent_category_id'] . "</parent_category_id>\n";
$xml_output .= "\t</record>\n";
}
$xml_output .= "</records>";
if($_POST['makeFile']==0)
echo $xml_output;
else
{
$fileName = rand().'file.xml';
$fp = fopen($fileName, 'w');
fwrite($fp, $xml_output);
fclose($fp);
$dbq="\"";
echo $fileName;
}
?>