PHP Mit Composer installierte Script einbinden?

Dsimon24

Lieutenant
Registriert
Aug. 2016
Beiträge
595
Hallo zusammen,

ich versuche gerade die API von Pexels (Lizenzfreie Bilder)
in meine App zu integrieren. Mit Composer habe ich das PHP-Script
nun auf meinen Rechner installiert und die Daten auf meinen Server
übertragen. Nun komme ich jedoch nicht weiter, da mir nicht klar ist,
wie ich die Instanz einbinden kann.

Vielleicht kann mir von euch einer helfen?
Ich habe versucht die folgende Anleitung zu verfolgen:
https://github.com/glooby/pexels

Folgende Code habe ich dann eingebunden:
PHP:
<?php

  include('vendor/composer/ClassLoader.php');

  $pexels = new \Glooby\Pexels\Client("563492...f83ccf5c2");

  $response = $pexels->search('london');

  foreach ($response['photos'] as $photo) {
    echo "<img src='".$photo['src']['small']."'>";
  }

?>

Das Ergebnis: Ein HTTP Error 500.

Hat einer ne Idee, wie ich die Instanz korrekt einbinde?
Wahrscheinlich mache ich an dieser Stelle einen Fehler?

VG, David
 
Ohne auf den von dir angegebenen Programmcode Bezug zu nehmen: Kommst du an die PHP bzw. Apache Logs? Server Fehler 500 kann viel sein...
 
Warum lädst du den classloader? Da müsste doch auch eine autoload.php liegen?
require __DIR__ . '/vendor/autoload.php';
 
Ich werde morgen mal nachsehen, ob ich an die Logs komme.

Leider weiß ich nicht genau, was ich laden muss, deshalb habe ich
es mit der Datei probiert. Lade ich jetzt folgendes:
require __DIR__ . '/vendor/autoload.php'; bekomme ich ebenfalls
den Fehler. Diese Datei ist aber ebenfalls vorhanden.
 
Hallo,

so müsste das funktionieren, falls das Beispiel auf der Github-Seite stimmt:

PHP:
<?php
namespace MyStudio\MyApplication;

use Glooby\Pexels\Client;

require __DIR__.'/vendor/autoload.php';

$pexels = new Client("563492...f83ccf5c2");
$response = $pexels->search('london');
foreach ($response->photos as $photo) {
    echo "<img src='".$photo->src->small."' alt=''>";
}

Da ich kein API-Token habe, kann ich es jedoch nicht testen. Ohne den richtigen Key erhalte ich immer nur die Fehlermeldung

Code:
'Client error response [url] http://api.pexels.com/v1/search?query=london&amp;per_page=15&amp;page=1 [status code] 403 [reason phrase] Forbidden


Jedenfalls zu der Notation des Array of Objects, was da zurückgeliefert werden soll:
Eigenschaften von Objekten spricht man nicht mit Object['Property'] an, das ist ein furchtbarer Stil, da man sonst optisch Arrays nicht von Objekten trennen kann, wenn man den Code liest.

Aber der "Serverfehler" scheint ja zunächst auf viel grundlegendere Probleme hinzudeuten.

Grüße
 
Guten Morgen!

Dieser Code gibt jetzt mit dem korrekten API-Key schonmal keinen 500er-Error aus. Gebe ich allerdings den gekürzten Key ein, wie im Beispiel ersichtlich, erhalte ich einen 500er-Error. Mit dem korrekten Key erhalte ich eine Fehlerfreie aber dennoch nur weiße Seite.

Wo genau hast du dei Fehlermeldung mit dem inkorrekten Key denn erhalten? Direkt als Ausgabe im Browser? Den Fehler erhalte ich nämlich schonmal nicht.

VG, David
 
Naja im PHP-Error-Reporting (Browserausgabe oder Error-Log oder Syslogservice oder...)

Wenn Du keine Ausgabe erhälst ist die Ausgabe der Fehlermeldungen abgeschaltet, wie es für eine Produktivumgebung auch korrekt ist.

Ergänze mal Dein Skript um die folgenden Angaben, dann müsstest Du im Browser was sehen können.

PHP:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
 
Wenn ich den Code jetzt wie folgt ausführe:

PHP:
<?php

  error_reporting(E_ALL);
  ini_set("display_errors", 1);

  namespace MyStudio\MyApplication;

  use Glooby\Pexels\Client;

  require __DIR__.'/vendor/autoload.php';

  $pexels = new Client("563492ad6f91700001...6aa4f83ccf5c2");
  $response = $pexels->search('london');
  foreach ($response->photos as $photo) {
    echo "<img src='".$photo->src->small."' alt='Picture'>";
  }

?>

erhalte ich wieder einen 500er-Error.

Mir ist aber auch noch nicht so ganz klar, wie ich
den Error-Log oder Syslogservice auslesen kann.

Ist dies nur per SSH auf dem Server möglich?
 
Hast du keine lokale Testumgebung? Sowas wie XAMPP?
 
So ein Serverfehler kann auch aufgrund einer Fehlerhaften Konfiguration vom Webserver zustande kommen.
Liegt da eventuell noch eine .htaccess Datei, die das verursachen könnte?
 
Ich hatte es zuvor auf meinem Produktiv-Server getestet
- nun habe ich es mal über XAMPP lokal auf dem PC getestet.
Ich bekomme nun die folgenden Fehlermeldungen ausgegeben:

Notice: Undefined property: GuzzleHttp\Message\Response::$photos in C:\xServer\htdocs\pexels\test.php on line 14
&
Warning: Invalid argument supplied for foreach() in C:\xServer\htdocs\pexels\test.php on line 14

Leider verstehe ich aber nicht, was hier falsch sein könnte.

Muss ich 'MyStudio' & 'MyApplication' noch abändern?
 
Zuletzt bearbeitet:
Die Meldung 'Undefined property' ist doch eindeutig. Du gehst davon aus, dass search() immer ein Objekt mit diesem Property zurückliefert.
In dem Beispiel, dass ich gefunden habe wird übrigens mit Arrays gearbeitet. Bin mir nicht sicher, ob man die Objektnotation auch auf Arrays anwenden kann.
 
Wenn ich die Schleife abändere:

von:
PHP:
	foreach ($response->photos as $photo) {
		echo "<img src='".$photo->src->small."' alt=''>";
	}

in:
PHP:
	foreach ((array) $response->photos as $photo) {
		echo "<img src='".$photo->src->small."' alt=''>";
	}

Dann verschwindet zumindest schonmal der zweite Fehler.

Das mit der ersten Meldung verstehe ich noch nicht so ganz.
Kann ich das im Code mit einer kleinen Änderung umgehen?
 
Wie wäre es, wenn du erst mal prüfst, ob du auch das bekommen hast, was du erwartest?.
 
Guten Morgen!

Ich habe es jetzt mit folgendem Code getestet:

PHP:
<?php
	namespace MyStudio\MyApplication;
 
	use Glooby\Pexels\Client;
 
	require __DIR__.'/vendor/autoload.php';
 
	$pexels = new Client("563492ad6f9170000100000...c5186aa4f83ccf5c2");
	$response = $pexels->search('london');

	var_dump($response->photos);
?>

Als Ergebnis erhalte ich:
Notice: Undefined property: GuzzleHttp\Message\Response::$photos in C:\xServer\htdocs\pexels\test.php on line 14

NULL

Habe ich schon mein Testen einen Fehler eingebaut?
Oder ist der Wert wirklich NULL?
Dann frage ich mich, wo das Problem sein könnte.
 
Hier handelt es sich um eine GuzzleHttp\Message\Response. Es muss also vorher noch ->json() ausgefuehrt werden um die Daten als Array zu erhalten. Siehe Doku: http://docs.guzzlephp.org/en/5.3/quickstart.html#json-responses

PHP:
<?php
namespace MyStudio\MyApplication;

require __DIR__.'/vendor/autoload.php';

use Glooby\Pexels\Client;

$pexels = new Client("563492ad6f9170000100000...c5186aa4f83ccf5c2");
$response = $pexels->search('london');
$json = $response->json();

var_dump($json['photos']);

Die paar Zeilen aus der Client.php koennest du dir aber auch in dein Projekt reinkopieren und sparst dir das ganze Paket. Mehr als ein Webrequest mit dem Token im Header passiert da nicht. Ausserdem koenntest du die API dann auch per HTTPS ansprechen. :D
 
Zuletzt bearbeitet:
Das ist wohl das, was mir gefehlt hat - vielen Dank!

Folgendes wird nun ausgegeben:
Array
(
[0] => Array
(
[id] => 50632
[width] => 6000
[height] => 4000
=> https://www.pexels.com/photo/lo...n? JSON ist mir doch noch sehr fremd, leider.
 
Du bekommst ja ein Array zurück, das hat mit Json nichts mehr zu tun (der Methodenname ist etwas irreführend). Du holst dir dann einfach den Wert aus dem Index ['original'].
 
Zurück
Oben