Bootstrap drupal đúng cách cho tệp PHP độc lập?


16

Đây là những gì tôi có ngay bây giờ:

<?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();
?>

Tôi đang nhận được một loạt các lỗi từ phía trên khi chạy độc lập. Hoạt động tốt trong mô-đun của tôi. Một số lỗi là:

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
Điểm của tệp php độc lập là gì nếu bạn thực hiện bootstrap đầy đủ?
googletorp

2
@googletorp, thỉnh thoảng tôi sử dụng những thứ này để lên lịch mọi thứ thông qua một crontab khi tôi muốn kiểm soát truy cập Apache và muốn tránh xa cơ chế cron Drupal. Mặc dù vậy, tôi sẽ thêm rằng, sử dụng một mục hook_menu () hoặc lệnh drush thích hợp thường là một ý tưởng tốt hơn trong hầu hết các trường hợp.
mpdon Arena

1
Làm việc trên một trang web ngay bây giờ với một số tệp PHP bên ngoài cần sử dụng loại chức năng này. Tôi thấy điều này thời gian gần đây, có lẽ nó sẽ giúp: interworks.com/blogs/jkhalaj/2012/05/01/how-bootstrap-drupal
fndtn357

Bạn có thể bootstrap drupal với lệnh drush src Dưới đây là một số giải thích: oliverdavies.co.uk/blog/2013/11/dont-bootstrap-drupal-use-drush
ya.teck

Câu trả lời:


14

Cho đến nay, cách dễ nhất để quản lý bootstrap là sử dụng tập lệnh php drush , bí danh.

file.php:

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

Cli:

drush @alias scr file.php

Đầu ra:

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

Bằng cách này, bạn không cần phải đối phó với bootstrap, drush sẽ giải quyết hoàn toàn cho bạn và cung cấp cho bạn khả năng sử dụng dễ dàng trên các trang web nhờ bí danh. (Thậm chí có thể làm việc trên các trang web từ xa, mặc dù tôi đã không thử điều đó)


Nếu bạn muốn làm điều này trên một trang web từ xa, tập lệnh phải ở xa (xem drupal.stackexchange.com/questions/98098 ). Nếu tôi có thời gian rảnh (ha!) Sẽ thử một bản vá cho việc này.
mpdon Arena

Đây thực sự là cách đơn giản nhất để làm điều đó và sẽ nhận được nhiều upvote hơn.
Bala Clark

Chính xác thì @aliasphải làm gì? Tôi chỉ nhận được một Could not find the alias @alias. Thật không may, liên kết bạn cung cấp bị hỏng. Bạn có thể vui lòng sửa nó và mở rộng giải thích của bạn?
leymannx

@leymannx Này, xin lỗi tôi không nhận thấy câu hỏi của bạn trước đây. Tôi đã cập nhật liên kết đến tài liệu. Tuy nhiên, tôi đã không mở rộng phần bí danh, vì bí danh drush thực sự nằm ngoài phạm vi của câu hỏi cụ thể này.
Letharion

11

bootstrap độc lập Drupal 7 của bạn không hoàn toàn đúng.

Thử đi:

/**
 * 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

Hi vọng điêu nay co ich.


Hừm. Nó thất bại âm thầm ở dòng này: $ users = Views_get_view_result ('danh sách người dùng', 'uid_list'); Tôi có đúng không khi cuộc gọi drupal_override_server_variables của bạn phải trỏ đến vị trí của tệp php của tôi?
Joren

Phải bạn đúng rồi. Bootstrap này chỉ tải lớp cơ sở dữ liệu, nhưng không phải mô-đun. Bạn phải gọi hook init mô-đun cho các khung nhìn để sử dụng chức năng của nó hoặc bao gồm tệp mô-đun chịu trách nhiệm xử lý dữ liệu tại đây: require_once DRUPAL_ROOT . '...'; // include required module files to work with here
Zydrunas Tamasauskas

Tôi đã bao gồm common.inc, Views.module và ctools.module vì các lỗi làm cho rõ ràng là chúng cần thiết. Sau 3 điều này tôi đã ngừng nhận lỗi và nó chỉ chết trong im lặng. Không chắc chắn nơi để đi từ đây.
Joren

Làm bản in sau mỗi lần đưa vào và xem nó bị kẹt ở đâu. Sau đó, bạn có thể biết những gì sai. Như một tùy chọn, hãy thử làm bootstrap đầy đủ và xem điều gì sẽ xảy ra.
Zydrunas Tamasauskas

2

thế là đủ:

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

0

Lỗi cuối cùng

Cảnh báo: include_once (trang web / tất cả / mô-đun / lượt xem_bulk_operations / hành động / lưu trữ web / trang web / tất cả / mô-đun / lượt xem_bulk_operations / lượt xem_bulk_operations.module).

là một lỗi trong VBO. view_bulk_operations_load_action_includes () không sử dụng DRUPAL_ROOT khi sử dụng include_once. Tôi sẽ báo lỗi và sửa nó trong VBO.

Lỗi khác (2 liên quan đến nhau) có thể liên quan đến _system_Vbuild_module_data () không sử dụng DRUPAL_ROOT khi truy cập tệp mô-đun .info. Tôi sẽ đặt các điểm ngắt trong system_Vbuild_module_data () cho biến $ module và xem liệu bạn có thể xác định điểm đó không. Một lần nữa gửi một lỗi với lõi drupal vì tôi không thấy vấn đề này trong hàng đợi vấn đề.

Chúc may mắn!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.