我無法使PHP內置函數fputcsv()
正常工作。這是我試過的:爲什麼我的fputcsv不能工作?
error_reporting(E_ALL);
ini_set('display_errors', 1);
include('DBConn.php'); //My SQL server connection information
include 'Helper/LogReport.php'; //Keeps a count of how many times reports are exported
$query = $conn->query("SELECT QName, tsql from pmdb.QDefs WHERE QName = '" .$TableName. "'");
$query->execute();
$qdef = $query->fetch(PDO::FETCH_ASSOC);
// Create and open file for writing
$filepath = 'exports/';
$filename = $qdef['QName'] . '.csv';
try
{
header('Content-Encoding: UTF-8');
header('Content-Type: text/csv; charset:UTF-8');
header('Content-Disposition: attachment; filename="' . $filename . '"');
//$openFile = fopen('php://output','w');
$openFile = fopen($filepath . $filename,'w');
}
catch(Exception $e)
{
echo "Something went wrong<br>";
die(print_r($e->getMessage()));
}
//define separators
$sep = ","; //separator
$br = "\r\n"; //line break
// Use returned tsql field as query for dataset
$tsql = $qdef['tsql'];
if(isset($DataReturn))
{
if(strpos($DataReturn['Order'],'EDIT'))
{
$DataReturn['Order'] = str_replace('EDIT','Id',$DataReturn['Order']);
}
$tsql = $tsql . $DataReturn['WhereClause'] . $DataReturn['Order'] . $DataReturn['Limit'];
}
$query = $conn->query($tsql);
$query->execute();
// Output data to CSV file
$headers = NULL;
while ($row = $query->fetch(PDO::FETCH_ASSOC))
{
//Write column headings to file
if (is_null($headers))
{
$headers = array_keys((array)$row);
if ($headers[0] == 'ID')
$headers[0] = 'Id';
fputcsv($openFile, $headers, ',','"');
}
//Write data
$modRow = preg_replace('/ \d{2}:\d{2}:\d{2}\.\d{3}/', '', array_values($row));
$modRow = preg_replace("/\r|\n/", "", $modRow);
/*
$modRow = str_replace('\r\n', " ", $modRow);
$modRow = str_replace('\n\r', " ", $modRow);
$modRow = str_replace('\n', " ", $modRow);
$modRow = str_replace('\r', " ", $modRow);
$modRow = str_replace(' ', " ", $modRow);
$modRow = str_replace('Â ', " ", $modRow);
$modRow = str_replace('"', '', $modRow);
$modRow = str_replace("'", "", $modRow);
*/
fputcsv($openFile, $modRow, ',','"');
}
// Close file
fclose($openFile);
但是沒有任何東西會被打印到文件中,它只是空白。我是否設置了錯誤?
編輯
我已經試過了fopen
每一個變化,我能找到this page,但他們都用fputcsv
時給我一個空白文件。我只在文件中獲取數據時,我的數組爲echo
。編輯
的
END你可以看到頭陣列安裝在數組鍵從查詢到DB返回。我可以echo
他們並得到正確的標題。
然後有自己的數據行。我刪除了不需要的字符,但它們仍然是數據陣列,應該使用fputcsv
進行打印。再次,我可以echo
數組的內容通過循環它。這就是我現在正在使出口產品正常工作的原因,但我知道這只是一種解決方法,並且希望能夠使fputcsv
正常工作。
這是我應得的行打印:
foreach($modRow as $RowPrint)
{
echo '"' .trim(unserialize(serialize($RowPrint))). '"' .$sep;
}
echo $br;
UPDATE
這裏的輸出,當我print_r
標題:
Array
(
[0] => Id
[1] => QSRC
[2] => QNAME
[3] => QDEF
[4] => ISACTIVE
[5] => RUNREPORT
[6] => FILEPATH
[7] => TSQL
)
,這裏是從一條線當我print_r
的$modRow
:
Array
(
[Id] => 60
[QSRC] => bau
[QNAME] => Oops I deleted this!
[QDEF] => SELECT REGION
[ISACTIVE] => 0
[RUNREPORT] => 0
[FILEPATH] =>
[TSQL] =>
)
我print_r
後fputcsv
應該已經打印到文件中。這些是文件中唯一的東西。
您的http服務器錯誤日誌文件顯示什麼? – arkascha
@arkascha我不知道。我無法在服務器上找到它,但我不確定在哪裏看。我已經檢查過與該網站相同的目錄,但它不在那裏。我還檢查了每個有我能找到的名稱中有'Log'的文件夾。 – Mike
標題是否在csv中打印?另外$ modRow不是一個字符串。它的對象 –