Как скачать CSV-файл из движка приложения Google? - PullRequest
0 голосов
/ 11 января 2019

Я не могу загрузить файл из Google App Engine. Это работает в вычислительном движке.

$sql="SELECT * FROM $table ";

$query = $db->runQuery($sql);

if($query->num_rows > 0) {
    $delimiter = ",";
    $filename = $table . date('Y-m-d') . ".csv";  

    // create a file pointer
    $f = fopen('php://memory', 'w');

    // set column headers
    $fields = array('id', 'srno', 'empid', 'empname');
    fputcsv($f, $fields, $delimiter);

    // output each row of the data, format line as csv and write to file pointer
    while($row = $query->fetch_assoc()) {
        // $status = ($row['status'] == '1') ? 'Active' : 'Inactive';
        $lineData = array(
            $row['id'], $row['srno'], $row['empid'], $row['empname'], ]
        );
        fputcsv($f, $lineData, $delimiter);
    }

    // move back to beginning of file
    fseek($f, 0);

    // set headers to download file rather than display it
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="' . $filename . '";');

    //output all remaining data on a file pointer
    fpassthru($f);
}
exit;

1 Ответ

0 голосов
/ 30 января 2019

Что такое логи, сообщение об ошибке? Как вы развернули это приложение? Можете ли вы показать app.yaml? Находится ли приложение в одном проекте с экземпляром Cloud SQL? Стандартная или гибкая среда? PHP 5 или 7?

Наиболее распространенные проблемы при подключении App Engine к облачному SQL:

  • Учетная запись службы App Engine должна иметь роль администратора Cloud SQL
  • В проекте, в котором находится экземпляр Cloud SQL, должны быть активированы Cloud SQL и API администратора SQL
  • Соединение между приложением и экземпляром MySQL осуществляется через прокси, который вы настраиваете в своем php-коде и файле yaml.

Вот пример подключения к экземпляру MySQL из PHP72, вы также можете использовать этот код для локального тестирования. Для этого вам необходимо установить и запустить Cloud SQL Proxy Client .

app.yaml

runtime: php72

handlers:
- url: .*
  script: auto

env_variables:
  MYSQL_USER: [MYSQL_USER]
  MYSQL_PASSWORD: [MYSQL_PASSWORD]
  MYSQL_DSN: 'mysql:dbname=[MYSQL_DB_NAME];unix_socket=/cloudsql/[MYSQL_INSTANCE_CONNECTION_NAME]'

beta_settings:
  cloud_sql_instances: [MYSQL_INSTANCE_CONNECTION_NAME]

index.php

<?php
    $user = getenv('MYSQL_USER');
    $password = getenv('MYSQL_PASSWORD');
    $dsn = getenv("MYSQL_DSN") ?: "mysql:host=127.0.0.1;port=3306;dbname=[MYSQL_DB_NAME]";

    $db = new PDO($dsn, $user, $password);

    try {
        $db = new PDO($dsn, $user, $password);

        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "Connected successfully"; 
        }
    catch(PDOException $e)
        {
        echo "Connection failed: " . $e->getMessage();
        }

    $statement = $db->prepare("SELECT * from [MYSQL_TABLE_NAME]");
    $statement->execute();
    $all = $statement->fetchAll();

    foreach ($all as $data) {
      echo $data["id"];
    }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...