it-swarm-ko.tech

PHP 스크립트를 Drupal)에서 호출하면 외부에서 호출하는 것과 다른 결과를 검색합니다. Drupal

Google Apps Shortlink Api를 사용하여 Shortlink를 만드는 모듈을 만들려고합니다 (아직 실험실에 있기 때문에 문서화되지 않음).

다음은 스크립트입니다 (또한 http://drupalbin.com/18667 ).

function drapps_shortlinks_createlink($url, $verbose = FALSE, $bypass_validattion = FALSE) {
  //loads ShortLink Class
  include_once('ShortLink.php');

  // URL validation with 2 clauses:
  // 1 - FILTER_VALIDATE_URL -> tests if the url is well constructed
  // 2 - @fopen -> tests if the URL actually exist
  if (!filter_var($url, FILTER_VALIDATE_URL) OR [email protected]($url,"r")) {
    // URL not valid or inexistant, so bail
    if ($verbose) {
      $msg = 'Invalid URL';
      return $msg;
    }
    else {
      return;
    }
  }

  // Get configuration values
  $domain = 'mydomain.com';
  $key = 'someHMACKEY';
  $user = '[email protected]';

  // Check if user admin has configured DRAPPS and DRAPPS ShortLinks
  if (!$domain OR !$key OR !$user) {
    //Something is missing so bail
    if ($verbose) {
      $msg = 'DRAPPS Shortlinks is not configured. Please go to <a href="' . base_path() . 'admin/settings/drapps">admin/settings/drapps</a>';
      return $msg;
    }
    else {
      return;
    }
  }

  //PHP Google Apps ShortLinks Implementation
  $slink = new ShortLink($domain, $key, $user);
  $r = clone $slink->pub($url);
  $status = $r->status;

  if ($status == 'ok') {
    return $r;
  }
  elseif ($verbose) {
    return $status;
  }
  else {
    return;
  }
}

이 스크립트는 SHortLink.php 라는 사용자 정의 생성 클래스를 사용합니다.

편집 :이 함수는 Drupal의 node-news.tpl.php에서 다음과 같이 호출됩니다.

...
<div class="test"><?php print drapps_shortlinks_createlink($url, TRUE, FALSE); ?></div>
...

test.php

<?php

$path = "path/to/drupal"; //changed for security reasons

include_once($path . 'sites/all/modules/drapps_shortlinks/drapps_shortlinks.inc');

$url = 'http://www.google.com/';

print drapps_shortlinks_createlink($url, TRUE, FALSE);

?>

http://www.mydomain.com/test/test.php 로 이동하면 스크립트가 제대로 작동하고 Google에서 '확인'응답을받습니다. 짧은 링크가 생성되고 제대로 작동합니다. 뉴스 노드로 이동하면 스크립트가 정상적으로 실행되지만 Google은 403 (금지됨) 오류로 응답합니다.

EDIT_1 :이 스크립트는 작동합니다. 그래서 나는 이것 뒤에있는 공명이 스크립트 자체가 아니라 drupal과 관련이 있다고 안전하게 가정 할 수 있다고 생각합니다.

EDIT_2 :이 뒤에 진짜 질문이 있다고 생각합니다. drupal에서 호출 할 때 스크립트가 다르게 동작하는 이유는 무엇입니까? 브레인 스토밍, 아이디어, 팁, 문제 해결 방법, 도움이 될 수 있다고 생각하는 모든 것 등 모든 의견을 환영합니다. 정말 감사하겠습니다.

7
Tivie

실제로 include_once를 사용해서는 안되며 대신 module_load_include 를 사용해야합니다.

이 작업을 완료 한 후 포함 파일에 디버그 코드를 넣어로드되고 있는지 확인합니다.

또한 포함 파일에 네임 스페이스 함수가 ​​포함되고 함수 범위 외부에서 사용되는 변수가 없습니다. 발생할 수있는 이름 충돌을 방지하기 위해.

그 외에는 누구도 제공 할 수있는 도움이별로 없습니다. 스크립트는 Drupal에서 일반 PHP 파일에 포함될 때와 동일한 방식으로 작동합니다.

3
ericduran