모듈을 작성하지 않고 어떻게 PHP 코드를 실행할 수 있습니까?


15

일부 번들에 필드를 첨부해야합니다. PHP 스 니펫이 나를 위해 일할 것이므로 모듈이 필요하지 않습니다. 아래 스 니펫은 실행 해야하는 것입니다.

$field_name = 'field_custom_image';
// Create the field.
$field = array(
  'field_name' => $field_name,
  'type' => 'image',
);
field_create_field($field);

그런 다음이 코드를 번들에 추가하는 스 니펫 :

// Create the instance.
$instance = array(
  'field_name' => $field_name,
  'entity_type' => 'node',
  'bundle' => 'article',
  'label' => 'Image',
  'description' => 'An image for the article.',
  'required' => TRUE,
);
field_create_instance($instance);

모듈을 작성, 설치, 실행 및 제거 할 필요없이 Drupal에서 PHP 코드를 직접 실행할 수있는 방법이 있습니까?


실무 답변과 내 질문에 대한 훌륭한 판에 모두 감사합니다. 모든 답변을 내 문제에 대한 해결책으로 투표했습니다. 이제 모든 해결책을 일으키는 최선의 해결책으로 그 답변 중 하나를 선택하는 것은 어려운 결정입니다.
Alireza Tabatabaeian

1
실행해야 할 코드를 보여 주면 답변이 더 완벽 해집니다.
kiamlaluno

@kiamlaluno 조언 해 주셔서 감사합니다. PHP 스 니펫을 질문에 첨부하겠습니다.
Alireza Tabatabaeian

1
밀접하게 관련된 질문 및 답변 : drush를 사용하여 PHP 스크립트를 실행하는 방법은 무엇입니까?
tanius

답변:


6

같은 생각으로 "PHP를 실행해야합니다"와 "모듈이 필요하지 않다"고 말하면이 특정 문제에 대한 접근 방식에서 잘못된 길을 가고 있다고 제안합니다. 또는 일반적인 사이트 구축 방법입니다.

drush scr그것이 정말로 가고 싶은 방향이라면 도움이 될 것입니다. 또는 독립형 PHP 스크립트를 작성하십시오 (기본적으로 drupal_bootstrap()index.php 에서 호출을 통해 모든 것을 복사 / 붙여 넣기 하고 사용자 정의 코드를 추가하십시오).하지만 다른 몇 가지가 있습니다 볼 수있는 것 :

  • 기능 모듈을 사용하여 컨텐츠 유형 (및 필드 기반 및 인스턴스)을 내 보냅니다. IMO, 당신은 어쨌든 이것을해야합니다.
  • 간단한 "사이트 수정"모듈을 작성하고 이와 같은 것을 업데이트 후크에 포함하십시오. 이렇게하려면 업데이트 후크가없는 빈 모듈을 만들고 사이트에서 활성화 한 다음 업데이트 후크를 추가하여 Drupal이 업데이트를 볼 수 있도록해야합니다.

내가 작업 한 많은 사이트에는이 두 가지 솔루션의 조합이있었습니다. 구성은 주로 내 보낸 기능 모듈로 이동해야하며, 할 수없는 ( 실제로 확실 하지 않습니까?) 업데이트 훅에 들어갈 수 있습니다.


특히 업데이트 후크 사용에 대해 알려주는 조언에 감사드립니다. 매우 유용하다
Alireza Tabatabaeian

이 접근 방식으로 PHP 코드를 실행하여 발생할 수있는 문제를 언급 해 주시겠습니까? PHP 스크립을 실행하여 일부 컨텐츠 유형에 필드를 첨부하는 것을 의미합니까?
Alireza Tabatabaeian


12

코드를 한 번만 실행해야하는 경우 Devel 모듈을 포함한 모듈을 설치하지 않고도 코드를 실행할 수 있습니다.

PHP 파일 (예 : tasks.php )을 작성하고 Drupal과 함께 제공되는 cron.php 파일이있는 곳에 다음 코드를 추가하십시오.

/**
 * Root directory of Drupal installation.
 */
define('DRUPAL_ROOT', getcwd());

include_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
drupal_set_time_limit(240);

// Your code here.

사이트를 유지 관리 / 배포하기 위해 Drush를 이미 사용하고 있다면 Drush 스크립트를 만들 수 있습니다 . 이러한 방식으로 CLI에 의해 실행될 수 있으며 인수를 수신하여 여러 경우에 재사용 할 수 있습니다.

#!/usr/bin/env drush

// Your code here.
// Access the options with drush_get_option(), or any argument with drush_shift().

또한 PHP 스크립트를 실행할 수 있습니다 drush php-eval(또는를 drush ev예를 들어)

drush php-eval 'print time();'

Drush 스크립트를 만들지 만 Drush를 설치할 수 없거나 브라우저에서 PHP 코드를 실행해야하는 경우 첫 번째 방법이 제대로 작동합니다.


10

코드 스 니펫을 파일에 추가하고 file_name.phpDrupal 사이트 루트 폴더에서 와 같이 파일을 저장하십시오 . 그런 다음 Drupal 사이트 루트 폴더 내에서 작업 디렉토리로 터미널에서 다음 명령을 실행하십시오.

drush scr file_name.php

이 명령은 PHP 파일을 실행합니다. (실행에 대한 아이디어를 얻기 위해 파일에 일부 print 문을 포함시켜 drush 명령을 실행하는 터미널에 텍스트, 변수 값 등을 출력 할 수 있습니다.)

참고 : 전제 조건으로 drush시스템에 설치되어 있어야합니다.


3

Devel 모듈의Php 인라인을 사용할 수 있지만 모듈없이 사용자 정의 코드를 실행하는 데 필요한 트릭 중 하나를 얻을 수 있습니다.

먼저 생성 menu itemhook_menu

function yourmdoule_menu()
{

    $items['ytest'] = array(
        'title' => 'my debug and devel test tool ',
        'description' => 'create for debug and faster develop',
        'page callback' => 'my_function',
        'type' => MENU_CALLBACK,
        'access callback' => true,
    );
    return $items;
}

function my_function{

/// run every want you want
}

그런 다음 캐시를 지우고 (drupal에 캐시 된 메뉴 항목) 원하는 모든 것을 넣고 my_function입력하십시오.yoursite.com/ytest

"dada"프로젝트에서 도움이 되길 바랍니다.)


@AlirezaTabatabaeian 당신은 "dada"를 환영합니다.이란 Drupalist를 볼 때 기뻐할 것입니다.;)
Yusef

2

Drupal 모듈의 목표는 특정 구성 요소에 별도의 논리를 제공하여 문제가 발생했을 때 비활성화 할 수 있다는 것입니다.

hook_install/hook_update

일회성으로 새 필드를 작성하는 경우 이상적인 시나리오는 hook_install또는hook_update 입니다.

사용자 정의 모듈이없는 경우 (btw. 해당 기능에 내 보낸 기능 모듈을 사용할 수도 있음) 업데이트 전용 새 모듈을 만듭니다 (예 :) site_updates. Drupal 7에서 필요한 것은 3 개의 파일로 폴더를 생성 하고 : .info에 설치 또는 업데이트 후크를 정의하는 것 입니다. 설치 / 업데이트 후크를 사용하면 특히 여러 Drupal 서버 (예 : dev, test 및 prod)가있는 경우 일관된 환경을 유지할 수 있으므로 다음 배포 중에 변경을 호출 할 수 있습니다..module.install.install

여전히 모듈을 만들지 않으려면 다른 방법이 있습니다.

일회성 실행

특정 PHP 코드를 한 번만 실행해야하는 경우 다음을 수행 할 수 있습니다.

  • 활성화 (STABLE)의 모듈에 코드를 붙여 넣습니다/devel/php .
  • 사용 CLI (및 /의 명령)을 실행하는 PHP 코드, 예를 들어,drush evalev

    drush ev 'field_create_field(["field_name"=>"foo", "type"=>"image"]);'
    drush ev 'print_r(field_info_field("foo"));'
  • drush scrPHP 스크립트를 실행하는 데 사용 합니다 :

    drush scr my_file.php

    my_file.php실행할 코드가 포함 된 일반 PHP 스크립트는 어디에 있습니까 ?

특정 페이지 실행

특정 페이지 또는 구성 요소에서 사용자 정의 코드를 실행하려면 다음을 수행하십시오.

모든 페이지 실행

모듈을 작성하지 않고 모든 페이지에서 PHP 코드를 추가하고 실행하려면 다음을 수행하십시오.

  • settings.php파일을 사용하십시오 . 구성 재정의와 같은 간단한 코드에만 권장됩니다. 그렇지 않으면 hook_init사용자 지정 모듈의 일부로 사용해야 합니다.
  • PHP 텍스트 필터를 활성화 한 다음 사용자 정의 PHP 코드가 포함 된 블록을 생성하고 해당 블록을 바닥 글 영역에 배치하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.