Правильно завантажувати 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.