Открытие файла с помощью PHP также вставляет все, что отображается - PullRequest
1 голос
/ 08 октября 2019

Я пытаюсь открыть файл с помощью PHP. Дело в том, что файл правильно сохраняется на сервере, но когда я хочу открыть его через PHP, чтобы пользователь мог его скачать / просмотреть, он также показывает другие эффекты, которые сделаны в коде. Если у кого-то есть идея, это будет для меня большой помощью.

Это мой код:

<?php

echo"<form method='post'><p>"; 

foreach ($ini_array as $section => $value){ 

    if ($section == 'FILE') {   // Ignorar la $section de pos 0 donde estan los datos del [FILE]
        continue;
    }

    if ($ini_array[$section]['Edit'] == false) { 
        $default_value_control = 'disabled';
    }else{
        $default_value_control = '';
    }

    echo
    "<div class='container'><input type=".$ini_array[$section]['Obj']." name='".$section."' value='".$ini_array[$section]['Value']."' ".$default_value_control. ">".$ini_array[$section]['Desc']."</div><div class='tooltip'>?<span class='tooltiptext'>".$ini_array[$section]['Help']."</span></div> <br>";
}

if (isset($_POST['ExecCmd'])){
    try{
        ini_set("display_errors", 0); 
        $cmd=$ini_array['FILE']['Path']." ";
        foreach ($ini_array as $section => $value){
            $manualinput=$_POST[$section];
            if (!empty($manualinput)){
               $cmd.=" ".$ini_array[$section]['Flag']." ".$manualinput;
            }
        }
    }
    finally { ini_set("display_errors", 1);
    }
        $myfile = fopen("output.csv", "w") or die("Unable to open file!");
        //echo $cmd;
        $command = escapeshellcmd($cmd); 
        $output = shell_exec($command);
        echo $output;       

        fwrite($myfile, $output);
        fclose($myfile);

        $file_url = 'output.csv';
        header('Content-Type: text/csv');
        header("Content-Transfer-Encoding: Binary"); 
        header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\""); 
        readfile($file_url);

}

echo "<button name='ExecCmd'>Execute</button></p></form>";

?>

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Что я сделал, чтобы сгенерировал новое эхо со ссылкой, если нажата кнопка отправки. Таким образом он перенаправляет на новую страницу с файлом чтения ($ file_url);и открывает ранее сохраненный файл без дополнительных отображаемых элементов.

if (isset($_POST['EjecutarCmd'])){
... all the above ...
echo "<a href='testoutputfile.php' target='_blank'>Download Report</a>";
}

Так что я переместил все это в этот новый "testoutputfile.php".

<?php
    $file_url = 'output.csv';
    header('Content-Type: text/csv');
    header("Content-Transfer-Encoding: Binary"); 
    header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\""); 
    readfile($file_url);
?>

ОБНОВЛЕНИЕ:

Затем я хотел закрыть новое окно при выполнении кода PHP. Нет способа сделать это без использования JavaScript, поэтому мне нужно было использовать другое эхо для вставки кода JavaScript. Finnaly Я использовал ob_start ();и ob_end_clean ();функции для управления буфером выходов.

На этом я закончил на новой странице "testoutputfile.php".

<?php
 $file_url = 'output.csv';
 header('Content-Type: text/csv');
 header("Content-Transfer-Encoding: Binary"); 
 header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\""); 
 readfile($file_url);
 ob_start();
 echo "<script>window.close();</script>";
 ob_end_clean();
?>
0 голосов
/ 08 октября 2019

Вы должны разделить функцию на два разных файла php. Файл для загрузки специфического файла. B-файл для отображения правильной информации.

Итак, если вы хотите скачать, запросите A-файл;если вам нужно отобразить некоторую информацию, запросите B.

. Для разработки шаблона также лучше.

_________ ниже show игнорируется ___________

header ('Content-Type: text/ csv ');

Для получения дополнительной информации: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types

В моем случае этот код работал нормально при использовании хрома для посещения страницы.

Но,когда я пытаюсь загрузить / открыть файл из моего PHP, он также печатает код PHP моей страницы в выходном файле. Это то, что я имел в виду.

Это другой вопрос ~~!

...