Правильно завантажувати drupal для окремого файлу PHP?


16

Це я зараз маю:

<?php
    define('DRUPAL_ROOT', '/var/www/clients/client1/web15/web');
    include_once(DRUPAL_ROOT . '/includes/bootstrap.inc');
    drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
//  drupal_flush_all_caches();  

    $users = views_get_view_result('userlist', 'uid_list');
    $i = 0;
    foreach ($users as $user) {
        $filename = 'sites/default/files/generated_pdfs/individual_pdf_report_' . $user->uid . '.pdf';
        generate_employee_pdf($user->uid, $filename);
        error_log('Generated ' . $filepath);
        $i++;
    }
    // create object
    $zip = new ZipArchive();
    // open archive
    if ($zip->open("sites/default/files/generated_zips/individual-reports.zip", ZIPARCHIVE::CREATE) !== TRUE) {
        die ("Could not open archive");
    }
    // initialize an iterator
    // pass it the directory to be processed
    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("sites/default/files/generated_pdfs/"));
    // iterate over the directory
    // add each file found to the archive
    foreach ($iterator as $key=>$value) {
        $zip->addFile(realpath($key), $value->getFilename()) or die ("ERROR: Could not add file: $key");
    }
    // close and save archive
    $zip->close();
?>

Я отримую купу помилок із зазначеного вище, коли запускаюсь окремо. Чудово працює в моєму модулі. Деякі з помилок:

Warning: Invalid argument supplied for foreach() in drupal_depth_first_search() (line 56 of /var/www/clients/client1/web15/web/includes/graph.inc).
Warning: Invalid argument supplied for foreach() in _module_build_dependencies() (line 229 of /var/www/clients/client1/web15/web/includes/module.inc).
Warning: include_once(sites/all/modules/views_bulk_operations/actions/archive.action.inc): failed to open stream: No such file or directory in views_bulk_operations_load_action_includes() (line 56 of /var/www/clients/client1/web15/web/sites/all/modules/views_bulk_operations/views_bulk_operations.module).

1
Який сенс автономного файлу php, якщо ви робите повний завантажувальний файл?
googletorp

2
@googletorp, я час від часу використовую їх для планування речей за допомогою crontab, коли я хочу контролю доступу Apache і хочу залишатися поза механізмом cron Drupal. Я хотів би додати, що використання правильного запису kuk_menu () або ударної команди зазвичай є кращою ідеєю у більшості обставин.
mpdonadio

1
Зараз на сайті працює декілька зовнішніх PHP-файлів, які потребують використання цього типу функцій. Я знайшов це в останній час , може бути , це допоможе: interworks.com/blogs/jkhalaj/2012/05/01/how-bootstrap-drupal
fndtn357

Ви можете завантажувати drupal за допомогою команди drush src Ось кілька пояснень: oliverdavies.co.uk/blog/2013/11/dont-bootstrap-drupal-use-drush
ya.teck

Відповіді:


14

На сьогодні найпростіший спосіб керувати завантажувальним інструментом - це використовувати drush php-script , псевдонім scr.

file.php:

<?php
echo l('Link', 'path');

Клієнт:

drush @alias scr file.php

Вихід:

<a href="/path">Link</a>

Таким чином вам не потрібно мати нічого спільного з завантажувальним пристроєм, drush вирішить це повністю для вас і надасть вам можливість легко використовувати його на сайтах завдяки псевдонімам. (Може навіть працювати на віддалених сайтах, хоча я цього не пробував)


Якщо ви хочете зробити це на віддаленому сайті, сценарій має бути віддаленим (див. Drupal.stackexchange.com/questions/98098 ). Якщо я коли-небудь отримаю вільний час (га!), Спробую виправити це.
mpdonadio

Це дійсно найпростіший спосіб зробити це і має отримати більше результатів.
Бала Кларк

Що саме @aliasпотрібно робити? Я тільки отримую Could not find the alias @alias. На жаль, надане вами посилання порушено. Не могли б ви виправити це і розширити своє пояснення?
leymannx

@leymannx Привіт, вибачте, що раніше я не помітив вашого питання. Я оновив посилання на документацію. Однак я не розширював частину псевдонімів, оскільки псевдоніми "drush" справді виходять за рамки цього конкретного питання.
Летаріон

11

ваш автономний завантажувальний апарат Drupal 7 не зовсім правильний.

Спробуйте це:

/**
 * Do not let execute this file from http request
 */
if (isset($_SERVER['REMOTE_ADDR'])) {
  print "...";
  exit(1);
}

/**
 * Initialize Drupal
 */
define('DRUPAL_ROOT', '/var/www/clients/client1/web15/web');
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
require_once DRUPAL_ROOT . '...'; // include required module files to work with here

drupal_override_server_variables(array('url' => 'http://www.example.com/batch.php')); // trick drupal to do bootstrap
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);

set_time_limit(4600); // adjust for your needs
ini_set('memory_limit', '3524M'); // adjust for your needs

Сподіваюсь, це допомагає.


Хм. У цьому рядку мовчки не вдається: $ users = views_get_view_result ('список користувачів', 'uid_list'); Чи я правда, що ваш дзвінок drupal_override_server_variables повинен вказувати на розташування мого файлу php?
Жорен

Так, ти правий. Ця завантажувальна програма завантажує лише шар бази даних, але не модулі. Щоб переглядати, щоб використовувати його функціональність, потрібно викликати модуль init require_once DRUPAL_ROOT . '...'; // include required module files to work with here
hocket

Я включив common.inc, views.module та ctools.module, оскільки помилки давали зрозуміти, що вони потрібні. Після цих 3 я перестав отримувати помилки, і це просто мовчки померло. Не впевнений, куди піти звідси.
Джорен

Робіть роздруківки після кожного включення і дивіться, де він застряг. Тоді ви можете знати, що не так. Як варіант, спробуйте зробити повний завантажувальний інструмент і подивитися, що відбувається.
Zydrunas Tamasauskas

2

цього достатньо:

define('DRUPAL_ROOT', '/path/to/drupal/root/');
 require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

0

Остання помилка

Попередження: include_once (сайти / всі / модулі / views_bulk_operations / Actions / archive.action.inc): не вдалося відкрити потік: Немає такого файлу чи каталогу у views_bulk_operations_load washing_includes () (рядок 56 з / var / www / client / client1 / web15 / веб / сайти / всі / модулі / views_bulk_operations / views_bulk_operations.module).

- помилка в VBO. views_bulk_operations_load washing_includes () не використовує DRUPAL_ROOT при використанні include_once. Я б подав помилку і виправив її у VBO.

Інша помилка (2 пов'язані один з одним) може бути пов’язана з _system_rebuild_module_data (), не використовуючи DRUPAL_ROOT під час доступу до модуля .info файл. Я поставив би точки перерви в system_rebuild_module_data () для змінної $ module і побачив, чи можете ви її вказати. Ще раз подайте помилку з drupal core, оскільки я не бачу цієї проблеми у черзі випусків.

Удачі!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.