bootstrap 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 และต้องการอยู่นอกกลไก Drupal cron ฉันจะเพิ่มว่าการใช้รายการ hook_menu () ที่เหมาะสมหรือคำสั่ง drush มักเป็นความคิดที่ดีกว่าในสถานการณ์ส่วนใหญ่
mpdonadio

1
ทำงานกับไซต์ในขณะนี้ด้วยไฟล์ PHP ภายนอกหลายไฟล์ที่จำเป็นต้องใช้ฟังก์ชั่นประเภทนี้ ฉันพบสิ่งนี้เมื่อเร็ว ๆ นี้บางทีมันอาจจะช่วย: interworks.com/blogs/jkhalaj/2012/05/01/how-bootstrap-drupal
fndtn357

คุณสามารถ bootstrap drupal ด้วยคำสั่งdrush srcต่อไปนี้เป็นคำอธิบายบางส่วน: oliverdavies.co.uk/blog/2013/11/dont-bootstrap-drupal-use-drush
ya.teck

คำตอบ:


14

วิธีที่ง่ายที่สุดในการจัดการ bootstrap คือการใช้drp php-script , alias scr

file.php:

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

CLI:

drush @alias scr file.php

เอาท์พุท:

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

วิธีนี้คุณไม่ต้องจัดการกับ bootstrap แต่อย่างใด drush จะแก้ปัญหาให้คุณโดยสิ้นเชิงและให้ความสามารถในการใช้งานได้อย่างง่ายดายผ่านไซต์ต่างๆด้วยนามแฝง (อาจทำงานบนไซต์ระยะไกลได้แม้ว่าฉันจะไม่ได้ลองก็ตาม)


หากคุณต้องการทำสิ่งนี้บนไซต์ระยะไกลสคริปต์ต้องเป็นรีโมต (ดูที่drupal.stackexchange.com/questions/98098 ) ถ้าฉันได้รับเวลาว่าง (ฮา!) จะลองใช้โปรแกรมปะแก้นี้
mpdonadio

นี่เป็นวิธีที่ง่ายที่สุดในการทำและควรเพิ่ม upvotes มากขึ้น
Bala Clark

สิ่งที่@aliasควรทำคืออะไร? Could not find the alias @aliasฉันเท่านั้นที่จะได้รับ น่าเสียดายที่ลิงก์ที่คุณให้มาเสียหาย คุณช่วยแก้ไขและขยายคำอธิบายของคุณได้ไหม
leymannx

@leymannx เฮ้ขอโทษฉันไม่ได้สังเกตคำถามของคุณมาก่อน ฉันได้อัปเดตลิงก์ไปยังเอกสารประกอบแล้ว ฉันไม่ได้ขยายส่วนนามแฝงอย่างไรก็ตามเนื่องจากชื่อแทนที่ไม่เหมาะสมสำหรับคำถามนี้โดยเฉพาะ
Letharion

11

Bootstrap แบบสแตนด์อโลน 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 ('userlist', 'uid_list'); ฉันจะแก้ไขการเรียก drupal_override_server_variables ของคุณควรชี้ไปที่ตำแหน่งของไฟล์ php ของฉันหรือไม่
Joren

ใช่คุณพูดถูก bootstrap นี้โหลดเฉพาะเลเยอร์ฐานข้อมูล แต่ไม่รวมถึงโมดูล คุณต้องเรียกใช้โมดูล hook hook เพื่อให้มุมมองใช้ฟังก์ชันการทำงานหรือรวมไฟล์โมดูลที่รับผิดชอบการประมวลผลข้อมูลที่นี่: require_once DRUPAL_ROOT . '...'; // include required module files to work with here
Zydrunas Tamasauskas

ฉันได้รวม common.inc, views.module และ ctools.module เป็นข้อผิดพลาดทำให้เห็นได้ชัดว่าพวกเขาต้องการ หลังจาก 3 สิ่งนี้ฉันหยุดรับข้อผิดพลาดและมันก็เงียบลงอย่างเงียบ ๆ ไม่แน่ใจว่าจะไปจากที่นี่
Joren

ทำผลงานพิมพ์หลังจากรวมแต่ละรายการแล้วดูว่าติดค้างที่ไหน จากนั้นคุณอาจรู้ว่ามีอะไรผิดปกติ ในฐานะที่เป็นตัวเลือกให้ลองทำการบู๊ตแบบเต็มและดูว่าเกิดอะไรขึ้น
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 (sites / all / modules / views_bulk_operations / actions / archive.action.inc): ไม่สามารถเปิดสตรีม: ไม่มีไฟล์หรือไดเรกทอรีใน เว็บ / เว็บไซต์ / ทั้งหมด / โมดูล / views_bulk_operations / views_bulk_operations.module)

เป็นข้อบกพร่องใน VBO views_bulk_operations_load_action_includes ()ไม่ได้ใช้ DRUPAL_ROOT เมื่อใช้ include_once ฉันจะยื่นข้อบกพร่องและแก้ไขใน VBO

ข้อผิดพลาดอื่น ๆ (ทั้งสองเกี่ยวข้องกัน) อาจเกี่ยวข้องกับ_system_rebuild_module_data ()ไม่ได้ใช้ DRUPAL_ROOT เมื่อเข้าถึงไฟล์. info ของโมดูล ฉันจะใส่จุดพักในsystem_rebuild_module_data ()สำหรับตัวแปร $ modules และดูว่าคุณสามารถปักหมุดมันได้หรือไม่ ยื่นข้อผิดพลาดอีกครั้งกับ drupal core เพราะฉันไม่เห็นปัญหานี้ในคิวปัญหา

โชคดี!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.