ビュー、Ctools、VBOがインストールされた8000人以上のユーザーがいるサイト。すべてのユーザーデータを1つのCSVファイルにエクスポートできますか?メモリを128MBに増やしても、 Views Data Export 運がないため(メモリ制限なし)疲れました。助けてください。
以下をexpusers.module
という名前のファイルに貼り付けます
<?php
/**
* Implementation of hook_menu()
*/
function expusers_menu() {
$items['expusers'] = array(
'page callback' => '_expusers_select',
'access arguments' => array('administer expusers'),
);
return $items;
}
/**
* Callback
*/
function _expusers_select() {
//
$csvfile_name = 'expusers.csv'; // the file to save to
$users = array();
$result = db_query('SELECT * FROM {users}');
foreach ($result as $record) {
unset($userarray);
foreach ($record as $key => $value) {
$userarray[] = (empty($value)) ? '' : '"' . $value . '"';
}
$user = implode(',',$userarray);
$users[] = $user . PHP_EOL; // Remove this if file_save_data don't work.
// Use PHP statement below to append to file here if file_save_data don't work.
// file_put_contents(..path to file.., $user, FILE_APPEND);
}
$file = file_save_data($users,'public://' .$csvfile_name); // Remove this if file_save_data don't work.
return '<p>CSV dump of {users} table written to file "' . $file->uri . '".</p>';
}
以下をexpusers.info
という名前のファイルに貼り付けます。
name = Export users
description = "Exports the {users} table to a CSV file in the public file area."
core = 7.x
expusers
ディレクトリ内にmodules
という名前のディレクトリを作成し、両方のファイルをその中に配置します。
サイトのモジュールページでカスタムモジュール「ユーザーのエクスポート」を有効にします。
パスexpusers
に移動します(例:http://example.com/expusers
)。
メッセージ:
CSV dump of {users} table written to file "public://expusers.csv".
表示されるはずです。
パブリックファイルエリアに移動し、ファイルを取得します。
上記の小さなカスタムモジュールは、リソースの消費量がViews data exportよりもはるかに少ないはずです。そのため、メモリの制限に達することなくCSVを取得できます。
ただし、ファイルにダンプする前に、最初にallユーザーデータをメモリ内の配列に収集します。
それでもメモリ制限に達した場合は、Drupalの非常に便利なfile_save_data
を使用してファイルに保存することはできません。代わりに、一度に1行ずつデータを保存する必要があります。これを行うための組み込みのDrupal関数はありませんが、代わりにPHP file_put_contents
を使用できるはずです。
コメントを使用して、コードを変更してDrupalのfile_save_data
をPHPのfile_put_contents
に置き換える方法を示しました。
これらの要件に対処するために考慮すべきもう1つのオプションは Forena モジュールです。
まず、レポート作成機能(WYSIWYGレポートライターやクエリビルダーなど)を使用して、ニーズに合ったレポートを作成します。その結果は、表形式の出力やグラフになります。レポートの内容が仕様に一致したら、それを(たとえば)CSVファイルとして保存できます。
以下は、forenaコミュニティのドキュメントページの1つ、つまり Forenaを検討する理由 からの引用です。
Forenaによって作成されたレポート(SVGGraphとmPDFを組み合わせたもの)は、PDFグラフが埋め込まれたドキュメントとして保存(エクスポート)できます。レポートの保存でサポートされている他の形式は、CSV、XLS、DOC、HTMLなどです。 。
Forena ビデオデモとチュートリアル には、ライブデモへのリンクがかなり含まれています。
これは単純な関数(D7)です。
/**
* Export all active users into CSV.
*/
function foo_export_users_csv($filename = 'users-' . REQUEST_TIME) {
drupal_add_http_header('Content-Type', 'text/csv');
drupal_add_http_header('Content-Disposition', 'attachment; filename=' . $filename . '.csv');
$results = db_query("SELECT * FROM {users} WHERE status = 1", array());
$csvdata = 'Uid,Username,Email,Created,Access,Login' . PHP_EOL;
foreach ($results as $record) {
$row = array();
$row[] = $record->uid;
$row[] = $record->name;
$row[] = $record->mail;
$row[] = $record->created;
$row[] = $record->access;
$row[] = $record->login;
$csvdata .= implode(',', $row) . PHP_EOL;
}
print $csvdata;
drupal_exit();
}
次に、hook_menu、いくつかの送信関数、または他の場所からこの関数を呼び出します。
/**
* Some callback function.
*/
function foo_export_users_submit(&$form, &$form_state) {
ini_set('max_execution_time', 0); // Set unlimited time for large sizes.
$values = $form_state['values'];
$op = $values['operation'];
switch ($op) {
case 'export':
foo_export_users_csv();
break;
}
}