在PHP fopen()中插入变量作为我的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); 我可能错了(

我正在尝试使我的xml文件URL动态化,以便多人可以同时使用我的站点和查询数据。为了做到这一点,我在XML文件前面插入了一个随机数php变量。由于某些原因,在尝试使用此变量时,我在创建和编写xml文件时遇到问题。当我使用像“wine.xml”这样的静态URL时,效果很好

          $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;
}

?>