Tek başına PHP dosyası için düzgün bootstrap drupal?


16

Şu anda sahip olduğum şey bu:

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

Bağımsız çalıştırıldığında yukarıdan bir sürü hata alıyorum. Modülümde iyi çalışıyor. Bazı hatalar:

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
Tam bir önyükleme yaparsanız bağımsız bir php dosyasının anlamı nedir?
googletorp

2
@googletorp, Apache erişim kontrolü istediğimde ve Drupal cron mekanizmasının dışında kalmak istediğimde bunları bir crontab aracılığıyla planlamak için zaman zaman kullanıyorum. Olsa da, uygun bir hook_menu () giriş veya bir drush komutu kullanarak çoğu durumda genellikle daha iyi bir fikir olduğunu eklemek istiyorum.
mpdonadio

1
Şu anda bir sitede bu tür işlevselliği kullanması gereken birkaç dış PHP dosyası ile çalışmak. Bunu yakın zamanda buldum, belki yardımcı olacaktır: interworks.com/blogs/jkhalaj/2012/05/01/how-bootstrap-drupal
fndtn357

Sen önyükler drupal ile drush src Burada komut bazı açıklamalar verilmiştir: oliverdavies.co.uk/blog/2013/11/dont-bootstrap-drupal-use-drush
ya.teck

Yanıtlar:


14

Bootstrap yönetmek için en kolay yolu drush php-script , alias scr kullanmaktır.

file.php:

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

cli:

drush @alias scr file.php

Çıktı:

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

Bu şekilde, bootstrap ile ilgili hiçbir şeyle uğraşmanıza gerek kalmaz, drush bunu tamamen sizin için çözer ve takma adlar sayesinde sitelerde kolayca kullanabilmenizi sağlar. (Bunu denememe rağmen uzak sitelerde bile çalışabilir)


Bunu uzak bir sitede yapmak istiyorsanız, komut dosyasının uzak olması gerekir (bkz. Drupal.stackexchange.com/questions/98098 ). Eğer serbest zaman alırsam (ha!) Bunun için bir yama deneyecek.
mpdonadio

Bu gerçekten bunu yapmanın en basit yoludur ve daha fazla oy almalıdır.
Bala Clark

Tam olarak ne @aliasyapmalı? Sadece a Could not find the alias @alias. Maalesef sağladığınız bağlantı koptu. Lütfen düzeltin ve açıklamanızı genişletir misiniz?
leymannx

@leymannx Hey, üzgünüm sorunuzu daha önce fark etmedim. Belgelerin bağlantısını güncelledim. Ancak, takma adlar bu özel soru için gerçekten kapsam dışı olduğundan, diğer ad bölümünü genişletmedim.
Letharion

11

bağımsız Drupal 7 önyüklemeniz tam olarak doğru değil.

Bunu dene:

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

Bu yardımcı olur umarım.


Hmm. Bu satırda sessizce başarısız oluyor: $ users = views_get_view_result ('kullanıcı listesi', 'uid_list'); Ben drupal_override_server_variables çağrının benim php dosya konumunu işaret gerekir düzeltmek?
Joren

Evet haklısın. Bu önyükleme yalnızca veritabanı katmanını yükler, ancak modülleri yüklemez. Görünümlerin işlevselliğini kullanabilmesi için modül init kancasını çağırmanız veya veri require_once DRUPAL_ROOT . '...'; // include required module files to work with here
işleminden

Hatalar ihtiyaç duyulduğunu açıkça ortaya koyduğu için common.inc, views.module ve ctools.module'yi ekledim. Bu 3'ten sonra hata almayı bıraktım ve sessizce öldü. Buradan nereye gideceğinden emin değilim.
Joren

Her dahil edildikten sonra çıktılar alın ve nerede sıkıştığını görün. O zaman neyin yanlış olduğunu biliyor olabilirsiniz. Bir seçenek olarak, tam önyükleme yapmayı deneyin ve ne olduğunu görün.
Zydrunas Tamasauskas

2

Bu yeterli:

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

0

Son hata

Uyarı: include_once (sites / all / modules / views_bulk_operations / actions / archive.action.inc): akış açılamadı: views_bulk_operations_load_action_includes () (/ var / www / clients / client1 / web15 / dizininde 56 numaralı dosya veya dizin yok web / siteler / all / modules / views_bulk_operations / views_bulk_operations.module).

VBO'da bir hata. views_bulk_operations_load_action_includes () include_once kullanılırken DRUPAL_ROOT kullanmaz. Bir hata dosyalamak ve VBO düzeltmek istiyorum.

Diğer hata (2 tanesi birbiriyle ilişkilidir ) modüller .info dosyasına erişirken DRUPAL_ROOT kullanmayan _system_rebuild_module_data () ile ilişkili olabilir . Ben $ modülleri değişkeni için system_rebuild_module_data () kırılma noktaları koymak ve onu pin pin eğer olabilir bakın. Sorun kuyruğunda bu sorunu görmüyorum gibi bir kez daha drupal çekirdekli bir hata dosyası.

İyi şanslar!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.