Ich versuche, ein Modul zu erstellen, das einen Shortlink mit der Google Apps Shortlink-API erstellt (undokumentiert, da es sich noch in den Labors befindet).
Hier ist das Skript (auch unter 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 !@fopen($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;
}
}
Dieses Skript verwendet eine benutzerdefinierte Klasse namens SHortLink.php .
BEARBEITEN: Diese Funktion wird in Drupals node-news.tpl.php wie folgt aufgerufen:
...
<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);
?>
Wenn ich zu http://www.mydomain.com/test/test.php gehe , funktioniert das Skript einwandfrei und ich erhalte eine "OK" -Antwort von Google. Ein kurzer Link wird erstellt und funktioniert einwandfrei. Wenn ich zu einem Nachrichtenknoten navigiere, wird das Skript in Ordnung ausgeführt, Google antwortet jedoch mit einem 403-Fehler (verboten).
EDIT_1: DIESES SCRIPT FUNKTIONIERT. Ich kann also mit Sicherheit davon ausgehen, dass der Resonanz dahinter eher mit Drupal als mit dem Skript selbst zu tun hat.
EDIT_2: Ich denke, die eigentliche Frage dahinter ist: Welche Gründe könnten dazu führen, dass sich ein Skript anders verhält, wenn es von Drupal aufgerufen wird? Jede Eingabe wird geschätzt: Brainstorming, Ideen, Tipps, Methoden zur Fehlerbehebung, alles, was Sie für hilfreich halten, werde ich wirklich schätzen.
print function function_name(..)
)Antworten:
Sie sollten include_once wirklich nicht verwenden. Stattdessen sollten Sie module_load_include verwenden .
Nachdem Sie dies getan haben, fügen Sie Debug-Code in Ihre Include-Datei ein, um sicherzustellen, dass er geladen wird.
Außerdem enthält Ihre Include-Datei Namespace-Funktionen und keine Variable, die außerhalb eines Funktionsbereichs verwendet wird. Um mögliche Namenskollisionen zu vermeiden.
Abgesehen davon gibt es wirklich nicht viel Hilfe, die jemand leisten kann. Ein Skript funktioniert in Drupal genauso wie in einer regulären PHP-Datei.
quelle