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);
아무 것도 파일에 인쇄되지 않으며 단지 비어 있습니다. 내가 잘못한 게있어?
내가 this page에서 찾을 수있는 fopen
에 대한 모든 변화를 시도
편집 할 수 있지만 fputcsv
를 사용할 때 그들은 모두 나에게 빈 파일을 제공합니다. 내가 파일 echo
배열에서만 데이터를 얻을. 편집
의
END 당신은 배열의 키는 DB에 쿼리에서 반환에서 헤더 배열이 설정되어 볼 수 있습니다. 나는 그들 echo
을 할 수 있고 정확한 헤더를 얻는다.
그런 다음 데이터 행 자체가 있습니다. 원하지 않는 문자는 제거하지만 여전히 데이터 배열이므로 fputcsv
으로 인쇄해야합니다. 다시 루프를 통해 배열 내용을 echo
수 있습니다. 이것이 수출을 지금 당장 얻는 방법이지만, 그게 해결 방법 일 뿐이며 fputcsv
을 얻고 싶습니다. 내가 헤더 print_r
때
foreach($modRow as $RowPrint)
{
echo '"' .trim(unserialize(serialize($RowPrint))). '"' .$sep;
}
echo $br;
UPDATE 여기
출력을 것 :
이
내가 행이 인쇄 얻고 어떻게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] =>
)
l print_r
fputcsv
이 모두 파일에 인쇄되어 있어야합니다. 이것들은 파일의 유일한 것입니다.
http 서버 오류 로그 파일에 표시되는 내용은 무엇입니까? – arkascha
@arkascha 잘 모르겠습니다. 서버에서 찾을 수는 없지만 어디서 볼지는 모르겠습니다. 같은 디렉토리에서 웹 사이트가 있는지 확인했지만 거기에 없습니다.나는 또한 찾을 수 있었던 이름에'Log'를 가진 모든 폴더를 체크했습니다. – Mike
헤더가 csv로 인쇄됩니까? 또한 $ modRow는 문자열이 아닙니다. 그것의 객체 –