독립형 PHP 파일에 대한 적절한 부트 스트랩 drupal?


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, 나는 때때로 아파치 액세스 제어를 원하고 Drupal cron 메커니즘을 벗어나고 싶을 때 crontab을 통해 일을 예약하기 위해 이것을 사용합니다. 그래도 적절한 hook_menu () 항목 또는 drush 명령을 사용하는 것이 대부분의 상황에서 일반적으로 더 좋습니다.
mpdonadio

1
이러한 유형의 기능을 활용해야하는 여러 외부 PHP 파일이있는 사이트에서 작업 중입니다. 나는 어쩌면 도움이 될 것입니다, 최근에 발견 : interworks.com/blogs/jkhalaj/2012/05/01/how-bootstrap-drupal
fndtn357을

drush src 명령으로 drupal을 부트 스트랩 할 수 있습니다. 몇 가지 설명이 있습니다. oliverdavies.co.uk/blog/2013/11/dont-bootstrap-drupal-use-drush
ya.teck

답변:


14

부트 스트랩을 관리하는 가장 쉬운 방법은 drush php-script , alias scr을 사용하는 것입니다.

file.php :

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

Cli :

drush @alias scr file.php

산출:

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

이렇게하면 부트 스트랩과 관련하여 아무것도 처리 할 필요가 없으며 drush는 완전히 해결할 수 있으며 별칭으로 인해 사이트 전체에서 쉽게 사용할 수 있습니다. (내가 시도하지는 않았지만 원격 사이트에서도 작동 할 수 있음)


원격 사이트에서이를 수행하려면 스크립트가 원격이어야합니다 ( drupal.stackexchange.com/questions/98098 참조 ). 내가 자유 시간을 얻는다면 (ha!) 이것에 대한 패치를 시도 할 것입니다.
mpdonadio

이것은 실제로 가장 간단한 방법이며 더 많은 투표를해야합니다.
Bala Clark

정확히 무엇 @alias을해야합니까? 나는 단지 얻는다 Could not find the alias @alias. 불행히도 제공 한 링크가 손상되었습니다. 문제를 해결하고 설명을 확장 해 주시겠습니까?
leymannx

@leymannx 이봐, 죄송합니다 전에 귀하의 질문을 몰랐습니다. 설명서에 대한 링크를 업데이트했습니다. 그러나 별명은 실제로이 특정 질문의 범위를 벗어나므로 별칭 부분을 확장하지 않았습니다.
Letharion

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 ( 'userlist', 'uid_list'); drupal_override_server_variables 호출이 내 PHP 파일의 위치를 ​​가리켜 야합니까?
Joren

네 맞습니다. 이 부트 스트랩은 데이터베이스 계층 만로드하지만 모듈은로드하지 않습니다. 뷰가 기능을 사용하거나 데이터 처리를 담당하는 모듈 파일을 포함 시키려면 모듈 init 후크를 호출해야합니다. 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_load_action_includes ()에 해당 파일 또는 디렉토리가 없습니다 (/ var / www / clients / client1 / web15 / 웹 / 사이트 /all/modules/views_bulk_operations/views_bulk_operations.module).

VBO의 버그입니다. views_bulk_operations_load_action_includes () 는 include_once를 사용할 때 DRUPAL_ROOT를 사용하지 않습니다. VBO에서 버그를 신고하고 해결하겠습니다.

다른 오류 (2는 서로 관련되어 있음)는 모듈 .info 파일에 액세스 할 때 DRUPAL_ROOT를 사용하지 않는 _system_rebuild_module_data () 와 관련 될 수 있습니다 . $ modules 변수에 대해 중단 점을 system_rebuild_module_data () 에 넣고 고정시킬 수 있는지 확인합니다. 이슈 큐에이 문제가 표시되지 않으므로 drupal core에 버그를 다시 한 번 제출하십시오.

행운을 빕니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.