2012-12-13 57 views
0

我在php中生成了一個XML文件。這個文件在我的本地主機上完美地生成了一個xml輸出,同時當我將它上傳到我的服務器時,它失敗了。
錯誤屏幕Screen Shot of Error 這是代碼。更改後動態生成的XML文件在服務器上不起作用,但在本地主機上運行良好

<?php 

    include_once("database/db.php"); 

    $sqlNews = "SELECT * FROM news"; 

    $runSqlNews = mysql_query($sqlNews); 

    while ($rowSqlNews = mysql_fetch_array($runSqlNews)) 
     $arrSqlNews[] = $rowSqlNews; 

     header('Content-type: text/xml'); 
     header('Pragma: public'); 
     header('Cache-control: private'); 
     header('Expires: -1'); 
     echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; 

     echo '<xml>'; 

    for($i=0;$i<count($arrSqlNews);$i++) 
    { 
     echo "<news>"; 
      echo "<newsId>".$arrSqlNews[$i][id]."</newsId>"; 
      echo "<newsAuthor>".$arrSqlNews[$i][news_author]."</newsAuthor>"; 

      echo "<description>".$arrSqlNews[$i][news_description]."</description>"; 
      echo "<newsText> <![CDATA[".$arrSqlNews[$i][news_text]. "]]></newsText>"; 
      echo "<plainNewsDescription>".$arrSqlNews[$i][plain_news_description]."</plainNewsDescription>"; 
      echo "<plainNewsTitle>".$arrSqlNews[$i][plain_news_title]."</plainNewsTitle>"; 
      echo "<newsUrl> <![CDATA[". $arrSqlNews[$i][news_url]. "]]></newsUrl>"; 
      echo "<newsCategory> <![CDATA[". $arrSqlNews[$i][category]. "]]></newsCategory>"; 
      echo "<image>http://metroplots.com/images/members/".$arrSqlNews[$i][news_image]."</image>"; 
      echo "<createdOn>".$arrSqlNews[$i][created_on]."</createdOn>"; 
     echo "</news>";  
    } 
     echo '</xml>'; 
?> 

新的XML文件

<?php 
    ini_set('error_reporting', E_ALL); 

    include_once("database/db.php"); 

    $dbConn  = new mysqli($dbHost, $dbUserName, $dbUserPasswrd, $database);; 

    $sqlNews = "SELECT id, news_author,news_description, 
          news_text, news_url, category, news_image, created_on 
        FROM news"; 

    $stmt = $dbConn->prepare($sqlNews); 
    $stmt->execute(); 

    $stmt->bind_result($id, $newsAuthor, $newsDescription, $newsText, $newsUrl, $Category, $newsImage, $createdOn); 


    header('Content-type: text/xml'); 
    header('Pragma: public'); 
    header('Cache-control: private'); 
    header('Expires: -1'); 

    echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; 
    echo '<xml>'; 
    echo "<news>"; 

    while($stmt->fetch()) 
    { 
     echo "<newsId>".$id."</newsId>"; 
     echo "<newsAuthor>".$newsAuthor."</newsAuthor>"; 
     echo "<description>".$newsDescription."</description>"; 
     echo "<newsText> <![CDATA[".$newsText. "]]></newsText>";    
     echo "<newsUrl> <![CDATA[". $newsUrl. "]]></newsUrl>"; 
     echo "<newsCategory> <![CDATA[". $Category. "]]></newsCategory>"; 
     echo "<image>http://metroplots.com/images/members/".$newsImage."</image>"; 
     echo "<createdOn>".$createdOn."</createdOn>";   
    } 

    echo "</news>";  
    echo '</xml>'; 

    $stmt->close(); 
    $dbConn->close(); 
?> 

請讓我知道我在哪裏出了錯。提前致謝 !!!

+0

您的遠程數據庫的'news'表中可能沒有任何內容? – Phil

+0

對不起。這個表格在數據庫上有1000個記錄。 –

+0

你在查看頁面源代碼時看到了什麼。 – Musa

回答

-1

我懷疑你的上傳工具不是以二進制安全的方式傳輸文件。嘗試比較本地機器和遠程機器上副本的文件大小。

+0

嗯,這是一個文本文件,對不對? –

+0

不是(.txt)文件。它是(.php)文件。 –

+0

毫無疑問。儘管如此,文件的內容仍然是文本,可以用ASCII模式傳輸。 –

1

很難說這裏究竟出了什麼問題。 爲了進行調試,您可以在腳本的開頭添加一個ini_set('error_reporting', E_ALL);或觀看php錯誤日誌。

你得在你的腳本架構的其他一些問題

  • 你應該不再使用mysql擴展。改爲使用mysqliPDO

  • 標題只能發送一次。將它們移出循環頂部

  • 爲什麼要循環兩次結果?刪除for循環並將其內容移入while循環。在循環中被$rowSqlNews替換變量$arrSqlNews和刪除索引訪問[$i]

簡單的例子

while($rowSqlNews = mysqli_fetch_assoc($mysqliResult)) 
{ 
    echo $rowSqlNews['yourdbCol1']; 
} 
+0

謝謝您的回覆。讓我現在檢查它。 –

+0

+1 這是我從你身上學到mysqli的那一天。感謝那。如上所述,我改變了一切。我添加了ini_set('error_reporting',E_ALL);並沒有在頁面上的差異。錯誤仍然是粘貼上面的屏幕截圖相同... –

+0

我發現的另一件事是如上所述,(ctrl + u)頁面源是空的。 –

1

您是否嘗試過禁用PHP輸出緩衝?

在PHP.ini中:output_buffering = Off或註釋掉現有設置:;output_buffering = On

更改設置後不要忘記重新啓動Web服務器。

相關問題