स्वसंपूर्ण 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 फ़ाइल का क्या मतलब है?
गोगलटॉर्प

2
@googletorp, मैं समय-समय पर एक crontab के माध्यम से चीजों को शेड्यूल करने के लिए इनका उपयोग करता हूं जब मैं Apache अभिगम नियंत्रण चाहता हूं और Drupal cron तंत्र से बाहर रहना चाहता हूं। मैं हालांकि जोड़ूंगा, कि उचित हुक_मेनू () प्रविष्टि या ड्रश कमांड का उपयोग करना आमतौर पर ज्यादातर परिस्थितियों में एक बेहतर विचार है।
mpdonadio

1
इस प्रकार की कार्यक्षमता का उपयोग करने के लिए कई बाहरी PHP फ़ाइलों के साथ अभी एक साइट पर काम करना। मैं हाल ही में इस पाया, शायद यह मदद मिलेगी: interworks.com/blogs/jkhalaj/2012/05/01/how-bootstrap-drupal
fndtn357

आप drush को drush के साथ drushal कर सकते हैं src कमांड यहाँ कुछ स्पष्टीकरण दिए गए हैं: oliverdavies.co.uk/blog/2013/11/dont-bootstrap-drupal-use-drush
ya.teck 11:14

जवाबों:


14

बूटस्ट्रैप को प्रबंधित करने का अब तक का सबसे आसान तरीका है ड्रिप php-script , alias scr।

file.php:

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

CLI:

drush @alias scr file.php

आउटपुट:

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

इस तरह से आपको बूटस्ट्रैप के संबंध में कुछ भी करने की आवश्यकता नहीं है, ड्रश इसे पूरी तरह से आपके लिए हल कर देगा, और आपको उपनामों के लिए धन्यवाद साइटों पर आसानी से उपयोग करने की सुविधा देता है। (दूरस्थ साइटों पर भी काम कर सकते हैं, हालांकि मैंने कोशिश नहीं की है)


यदि आप किसी दूरस्थ साइट पर ऐसा करना चाहते हैं, तो स्क्रिप्ट को दूरस्थ होना चाहिए (देखें drupal.stackexchange.com/questions/98098 )। अगर मुझे कभी खाली समय मिलता है (हा!) इसके लिए एक पैच की कोशिश करेंगे।
mpdonadio

यह वास्तव में इसे करने का सबसे सरल तरीका है और इसे और अधिक बढ़ाना चाहिए।
बाला क्लार्क

वास्तव में क्या @aliasकरना चाहिए? मुझे केवल ए Could not find the alias @alias। दुर्भाग्य से आपके द्वारा प्रदत्त लिंक टूट गया है। क्या आप इसे ठीक कर सकते हैं और अपनी व्याख्या का विस्तार कर सकते हैं?
लेमनकैंस

@leymannx अरे, माफ करना, मैंने पहले आपके सवाल पर गौर नहीं किया। मैंने दस्तावेज़ के लिंक को अपडेट कर दिया है। हालाँकि, मैंने अलियास भाग का विस्तार नहीं किया है, क्योंकि इस विशेष प्रश्न के लिए ड्रिप अलाइयस वास्तव में दायरे से बाहर हैं।
सुस्ती २ion ’

11

आपका स्टैंडअलोन ड्रुपल 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

उम्मीद है की यह मदद करेगा।


हम्म। यह इस पंक्ति में चुपचाप विफल हो रहा है: $ उपयोगकर्ता = views_get_view_result ('उपयोगकर्ता सूची', 'uid_list_); क्या मैं सही हूं कि आपकी drupal_override_server_variables कॉल मेरे php फ़ाइल के स्थान पर इंगित होनी चाहिए?
जोरेन

हाँ तुम सही हो। यह बूटस्ट्रैप केवल डेटाबेस लेयर को लोड करता है, लेकिन मॉड्यूल को नहीं। आपको इसकी कार्यक्षमता का उपयोग करने के लिए मॉड्यूल इनिट हुक को लागू करना होगा या डेटा प्रोसेसिंग के लिए जिम्मेदार मॉड्यूल फ़ाइल को यहां शामिल करना होगा: require_once DRUPAL_ROOT . '...'; // include required module files to work with here
Zydrunas Tamasauskas

मैंने common.inc, views.module और ctools.module को शामिल किया है क्योंकि त्रुटियों ने यह स्पष्ट कर दिया है कि उनकी आवश्यकता थी। इन 3 के बाद मुझे त्रुटियाँ मिलना बंद हो गईं और बस चुपचाप मर गई। कुछ निश्चित नहीं कि यहाँ से कहाँ जाना है।
जोरेन

प्रत्येक समावेश के बाद प्रिंटआउट करें और देखें कि यह कहां अटक गया है। तब आप जान सकते हैं कि क्या गलत है। एक विकल्प के रूप में, पूर्ण बूटस्ट्रैप करने की कोशिश करें और देखें कि क्या होता है।
४as पर ज़िद्रुनस तामौस्कास

2

यह काफी है:

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

0

आखिरी त्रुटि

चेतावनी: शामिल_नहीं (साइट / सभी / मॉड्यूल / विचार_बल्क_करण / क्रियाएं / संग्रह.संबंधी। सी): धारा खोलने में विफल: view_bulk_operations_load_action_includes () (/ 56 / var / www / क्लाइंट / क्लाइंट 1 / web15 / की पंक्ति 56) में ऐसी कोई फ़ाइल या निर्देशिका नहीं। वेब / साइटों / सभी / मॉड्यूल / views_bulk_operations / views_bulk_operations.module)।

VBO में एक बग है। जब view_bulk_operations_load_action_includes () DRUPAL_ROOT का उपयोग नहीं करता है, तो इसमें शामिल हैं। मैं बग दर्ज करूंगा और इसे वीबीओ में ठीक करूंगा।

अन्य त्रुटि (2 एक दूसरे से संबंधित हैं ) _system_rebuild_module_data () मॉड्यूल .INfo फ़ाइल का उपयोग करते समय DRUPAL_ROOT का उपयोग नहीं करने से संबंधित हो सकती है । मैं $ मॉड्यूल मॉड्यूल के लिए system_rebuild_module_data () में ब्रेक अंक डालूंगा और देखूंगा कि क्या आप इसे इंगित कर सकते हैं। एक बार फिर ड्रुपल कोर के साथ एक बग दर्ज करें क्योंकि मैं इस मुद्दे को कतार में नहीं देखता हूं।

सौभाग्य!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.