PHP: запись в файл CSV, когда заголовки потоков находятся в функции

Я пытаюсь записать запрос SQL в файл CSV на PHP. У меня была эта работа, благодаря некоторому совету [в предыдущем вопросе] [1]. Однако я пытаюсь уменьшить количество повторений в моем коде, что возможно из предыдущего примера.

Я создаю заголовки / потоковую оболочку в функции здесь:

function csvCreate($filename){
header("Cache=Control: must-revalidate, post-check=0, pre-check=0");
header('Content-Description: File Transfer');
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename={$filename}");
header("Expires: 0");
header("Pragma: public");
$fh = @fopen( 'php://output', 'w' );
}

Затем я вызываю функцию в условном выражении и передаю $ filename в качестве параметра здесь:

if(isset($_POST["Submit"]) && ($_POST['Weight'] == 'Weight'))
{
//csvCreate->$fileName .= 'OutputWeightNull.csv';
csvCreate('OutputWeightNull.csv');
$query = mysqli_query($conn, 'SELECT * FROM  `bfi_product_volumne_data` WHERE weight = 0 OR weight IS NULL') or die(mysqli_error($conn));
if ($result = mysqli_fetch_array($query,MYSQLI_ASSOC))
{
fputcsv($fh, array_keys($result));
fputcsv($fh, $result);
while ($result = mysqli_fetch_array($query,MYSQLI_ASSOC))
{
fputcsv($fh, $result);
}
}
}

Проблема в том, что данные не записываются в CSV. Я чувствую, что мне нужно указать вызов функции fputcsv. Я попытался сделать это с помощью ‘csvCreate-> fputcsv’, который не работает. Может ли кто-нибудь предложить, что проблема может быть здесь. Спасибо

  [1]: http://stackoverflow.com/questions/33433737/php-writing-a-mysql-query-to-cs

0

Решение

Проблема в том, что вы создаете указатель файла $fh внутри функции. Таким образом, он виден только внутри функции, а не снаружи функции (как это было, вероятно, до того, как вы поместили код в функцию). Вам нужно передать эту переменную из функции во внешний мир. Это может быть сделано с return, Затем во «внешнем» мире вам нужно присвоить это возвращаемое значение переменной во «внешней» области и использовать ее.

Вам нужно пройти $fh вне функции. То есть

function csvCreate($filename){
// .. rest of the code
$fh = @fopen( 'php://output', 'w' );
return $fh;
}

затем в коде, где вы пишете для вывода, выполните следующие действия $fh видно в этом объеме.

// .. rest of the code
$fh = csvCreate('OutputWeightNull.csv');
// .. rest of the code
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]