php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2010

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.03.2010, 23:27  
Erfahrener Benutzer
 
Registriert seit: 24.05.2008
Beiträge: 173
PHP-Kenntnisse:
Anfänger
Griffith sorgt für eine eindrucksvolle AtmosphäreGriffith sorgt für eine eindrucksvolle Atmosphäre
Standard Namespaces: Fremde API importieren

Konkretes Problem

Ich versuche mit der API von phpbb3 einen neuen Benutzer zu erstellen.
Das Problem ist, dass in phpbb3 keinerlei Namespaces verwendet werden, ich aber möchte, dass alle phpbb3-Funktionen ihren eigenen Namespace beim Import erhalten.
Ich möchte nicht, dass die importierten Funktionsnamen und Variablen mit meinem restlichen Quelltext in Konflikt geraten.

Weil manche die phpbb3-API u.U nicht kennen, stelle ich die Frage aber doch lieber etwas allgemeiner...

Allgemeine Frage #1

Ich habe eine fremde API in der Datei "api.inc.php":
PHP-Code:
<?php

$data 
"Unbekannt";

function 
setze_Wert($wert)
{
    global 
$data;
    
$data = (string) $wert;
}

function 
lese_Wert()
{
    global 
$data;
    return 
$data;
}

?>
Ist es jetzt möglich diese API in mein Script einzubinden, z.B. per require, ohne dass die Funktionen setze_Wert() und lese_Wert() im globalen Namespace landen, sondern z.B. in \Fremde_API\lese_Wert() ?

Allgemeine Frage #2

Ich nehme an, dass Variablen generell immer dem globalen Namespace angehören?

PHP-Code:
<?php

namespace Geheim
;

$passwort "supergeheim";

function 
teste($arg)
{
    global 
$passwort;
    return (
$arg === $passwort);
}

?>
$passwort wäre bei diesem Beispiel also für alle sichtbar und nicht nur für Funktionen innerhalb des Namespaces "Geheim"?


Bin für jede Hilfe dankbar
Griffith ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.03.2010, 09:53  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Zu 1: Nur sehr begrenzt. Du könntest z.B. versuchen, der anderen API den Namespace per Stream-Wrapper oder Stream-Filter unter zu schieben. Problematisch kann das allerdings werden, sobald da weitere include/require innerhalb der anderen API auftauchen. Um sowas zu erreichen müsstest Du den PHP-Quellcode der anderen API wärend des include modifizieren.

Für eine einzelne fremde Datei ginge das z.B. so:

PHP-Code:
<?php
class NamespaceInjectionFilter extends php_user_filter 
{
  private 
$nsWritten=false;
  private 
$namespace='';

  public function 
filter($in$out, &$consumed$closing)
  {
    
$cnt=0;
    while (
$bucket stream_bucket_make_writeable($in)) 
    {
      if(!empty(
$this->namespace) && !$this->nsWritten)
      {
        
$bucket->data preg_replace('#<\?(php)?#',
                                     
"\$0\n namespace {$this->namespace};\n",
                                     
$bucket->data,
                                     
1,
                                     
$cnt);
        
$nsWritten=($cnt==1);
      }

      
$consumed += $bucket->datalen;
      
stream_bucket_append($out$bucket);
    }
    return 
PSFS_PASS_ON;
  }
  
  public function 
onCreate()
  {
    if(
preg_match('#^nsInject\.((\\\?[a-zA-Z_]\w+)+)$#',$this->filtername,$m))
      
$this->namespace=$m[1];
    else
      throw new 
InvalidArgumentException();
  }
}

stream_filter_register('nsInject.*''NamespaceInjectionFilter');
include(
'php://filter/read=nsInject.PHP3BBNamespace/resource=file.php');
?>
(leicht modifizierter & ungetesteter Code aus der großen Grabbelkiste)

Zu 2: Richtig - Variablen & Namespaces haben nicht wirklich was miteinander zu tun.

Gruß Jens
Jens Clasen ist offline  
Alt 16.03.2010, 16:25  
Erfahrener Benutzer
 
Registriert seit: 24.05.2008
Beiträge: 173
PHP-Kenntnisse:
Anfänger
Griffith sorgt für eine eindrucksvolle AtmosphäreGriffith sorgt für eine eindrucksvolle Atmosphäre
Standard

Ah, danke für den Hinweis.

Obwohl es streng genommen immernoch nicht ein wirklich sicheres System ist,
wenn die fremde API ebenfalls solche Tricks benutzt und ihre eigenen Namespaces dynamisch erstellen würde.

Ist auf jeden Fall für phpbb ne nette Lösung.

Du hast mich gerettet
Griffith ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
XML-Tabellen und -Daten in eine MySQL-Datenbank importieren PHP-Fortgeschrittene 11 12.07.2011 12:30
.csv Datei importieren problem? Ethem Datenbanken 1 03.01.2009 20:19
Mehrere CSV Dateien gleichzeitig importieren MariaC Datenbanken 4 01.10.2008 15:32
PHP Namespaces ab 5.3 drsoong Off-Topic Diskussionen 18 25.09.2008 09:57
importieren meiner sql Datenbank matthros Datenbanken 14 19.05.2006 12:42
Dump Importieren mit pMA funktzt nicht Dueperthal Datenbanken 1 07.01.2006 20:53
Datei importieren Mano PHP Tipps 2005-2 3 16.10.2005 15:14
phpmyadmin: csv importieren automatisieren PHP Tipps 2005 1 02.03.2005 16:00
mit PHP per POST Daten an eine Fremde seite schicken? Kenshin PHP Tipps 2005 7 04.02.2005 16:20
Dump via Konsole in DB importieren Datenbanken 1 25.01.2005 13:40
[Erledigt] MySQL ODBC - Word 97 - Daten importieren Datenbanken 0 30.11.2004 10:44
ASP in PHP Files importieren? PHP Tipps 2004-2 2 19.11.2004 10:46
Fremde php auf Website mit IFRAMES einbinden PHP Tipps 2004 5 26.09.2004 00:45
[Erledigt] Kann SQL Datei über phpMyAdmin nicht importieren Datenbanken 1 11.08.2004 09:53
Problem beim importieren einer Datenbank PHP Tipps 2004 8 09.08.2004 15:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
namespace php variable within, php namespace importieren ohne include, php namespace inject, php namespace import global, phpbb namespace, pma namespace, api portieren, phpbb3 namespace setzen, phpbb3 api include, funktionen importieren php, php import global namespace, eigene php api erstellen, phpbb3 api, php import namespace, php namespace variable, phpbb user api, php namespaces, <import namespace=, php \klasse importieren\, php private namespace

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:31 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum