Closed CommanderBond closed 9 years ago
Hi, steht was im Errorlog?
Meinst du das PHP Errorlog oder hat Shariff auch eines (das ich noch nicht gefunden habe). In der PHP.ini steht ;error_log = php_errors.log, es ist also auskommentiert. log_errors = On ist aber gesetzt.
Ich meine das PHP-Errorlog bzw. das deines Webservers.
Ich habe in der php.ini jetzt eine Log-datei angegeben, einkommentiert und den Application Pool recycelt. Es gibt (noch) keine php_errors.log & im Webserverlog finden sich auch keine Fehler – auch nicht nach Aufruf von https://www.ulc-moedling.at/shariff-backend/?url=https://www.ulc-moedling.at
Gibt es auch keine Einträge, wenn du den Cache leerst (also das Cache-Verzeichnis löschst)?
Doch, dann schon. Dann wird wird ein entsprechender Fehler eingetragen. Und weil ich die echos aus Issue #23 eingetragen habe, sieht man auch eine entsprechende Ausgabe im Browser. Lege ich das Cache-Verzeichnis manuell wieder an, kommt wieder {"pinterest":0}
Und was ist das für ein Fehler?
Der zu erwartende:
PHP Fatal error: Uncaught exception 'Zend\Cache\Exception\InvalidArgumentException' with message 'Cache directory 'C:\Inetpub\vhosts\ulc-moedling.at\httpdocs\cache\shariff_manuell' not found or not a directory' in C:\Inetpub\vhosts\ulc-moedling.at\httpdocs\shariff-backend\vendor\zendframework\zend-cache\src\Storage\Adapter\FilesystemOptions.php:130 Stack trace:
0 C:\Inetpub\vhosts\ulc-moedling.at\httpdocs\shariff-backend\src\ZendCache.php(51): Zend\Cache\Storage\Adapter\FilesystemOptions->setCacheDir('C:\Inetpub\vhos...')
1 C:\Inetpub\vhosts\ulc-moedling.at\httpdocs\shariff-backend\src\Backend.php(37): Heise\Shariff\ZendCache->__construct(Array)
2 C:\Inetpub\vhosts\ulc-moedling.at\httpdocs\shariff-backend\index.php(21): Heise\Shariff\Backend->__construct(Array)
3 C:\Inetpub\vhosts\ulc-moedling.at\httpdocs\shariff-backend\index.php(26): Application::run()
4 {main}
thrown in C:\Inetpub\vhosts\ulc-moedling.at\httpdocs\shariff-backend\vendor\zendframework\zend-cache\src\Storage\Adapter\FilesystemOptions.php on line 130
Leg bitte C:\Inetpub\vhosts\ulc-moedling.at\httpdocs\cache\shariff_manuell
wieder an. Gibt es dann einen Fehler?
Nein, {"pinterest":0} ist nach dem Wiederanlegen die Rückgabe, wie per https://www.ulc-moedling.at/shariff-backend/?url=https://www.ulc-moedling.at zu sehen.
Ich habe gerade versucht, das Problem unter Verwendung deiner Konfiguration auf meinem lokalen System nachzustellen. Bei mir funktioniert aber alles.
Kannst du in dem catch(){}
ein echo
/print_r
einbauen? Ich vermute, dass es an dieser Stelle der Fehler auftritt und blöderweise ignoriert wird.
Ja kann ich machen. In welcher Datei gehört das echo in welches catch (falls es dort mehrere gibt)?
Oops, Link kopiert, aber nicht eingefuegt:
https://github.com/heiseonline/shariff-backend-php/blob/master/src/Backend/BackendManager.php#L101
Ich habe das catch folgendermaßen geändert:
try {
$counts[ $service->getName() ] = (int)$service->extractCount($results[$i]->json());
} catch (\Exception $e) {
echo'Skip service if broken';// Skip service if broken
}
Angezeigt wurde nie etwas. Wenn ich ein echo testweise vor das try einfüge, sodass es auf jeden Fall und immer angezeigt werden müsste, geschieht etwas Seltsames: Es wird genau beim ersten Aufruf von https://www.ulc-moedling.at/shariff-backend/?url=https://www.ulc-moedling.at angezeigt. Nach einem Reload nie wieder. Füge ich dann ein echo gleich am Beginn der foreach Schleife ein, wird auch dieses genau beim ersten Aufruf angezeigt. Nur eine blöde Frage: Könnte da der OpCache von PHP oder der File Cache von WinCache schuld sein?
Das liegt am Caching. Kommentiere mal Zeilen 76-78 aus und probier nochmals. Dann ist der shariff cache mal "abgeschaltet".
Probier auch ein
var_dump($this->services);
var_dump($results);
vor der Zeile 96
Klingt so, als ob $this->services
nur einen Eintrag enthält. Kannst du das mal dumpen?
Danke für den Hinweis bzgl. Cache. Also: Die foreach Schleife schaut nun folgendermaßen aus:
foreach ($this->services as $service) {
echo $i;//Echo des Schleifenzählers eingefügt
if (method_exists($results[$i], "json")) {
try {
echo $service->getName(); //Echo des Servicenamens eingefügt
$counts[ $service->getName() ] = (int)$service->extractCount($results[$i]->json());
} catch (\Exception $e) {
echo'Skip service if broken';// Skip service if broken
}
}
$i++;
}
Die Ausgabe ist dann: 01234567pinterest8{"pinterest":0}
Wenn foreach folgendermaßen definiert ist:
foreach ($this->services as $service) {
echo $i;//Echo des Schleifenzählers eingefügt
echo $service->getName();//Echo des Servicenamens eingefügt
if (method_exists($results[$i], "json")) {
try {
echo $service->getName();//Nochmal Echo des Servicenamens eingefügt
$counts[ $service->getName() ] = (int)$service->extractCount($results[$i]->json());
} catch (\Exception $e) {
echo'Skip service if broken';// Skip service if broken
}
}
$i++;
}
ist die Ausgabe 0googleplus1twitter2facebook3linkedin4reddit5stumbleupon6flattr7pinterestpinterest8xing{"pinterest":0}
Für mich sieht das so aus, als wenn dann das if (method_exists($results[$i], "json"))
fehlschlägt.
Wie kann ich $this->services
dumpen? echo $this->services
liefert nur "array" zurück (wie gesagt: ich bin ein PHP Dummy).
Schau dir meinen post von oben an. https://github.com/heiseonline/shariff-backend-php/issues/35#issuecomment-123706744
@pmb0 by reading, I'd rather say that $results
has no results.
@liayn meinst du das Abschalten des Caches? Den habe ich deaktiviert per Auskommentieren der Zeilen 76-78.
@kondrich
var_dump($this->services);
var_dump($results);
vor der foreach
Das Ergebhnis seht ihr hier: https://www.ulc-moedling.at/shariff-backend/?url=https://www.ulc-moedling.at Ich habe das Dump auch als .txt abgepeichert (41MB) und wollte es hier gezippt posten, aber es sind nur Bilder erlaubt.
Ok, das ist dann bisschen gar viel. ;-) Schauen wir mal durch.
Problem with the SSL CA cert (path? access rights?)
Kann es sein, dass der Server falsch konfiguriert ist?
@liayn: Ich sehe die Zeilen auch im Dump. Keine Ahnung, was cURL mit dem SSL Zertifikat hat oder ob da ein generelles Problem vorliegt. Nicht, dass ich wüsste.
Das ist definitiv kein shariff Problem. Dein Server kann mit den SSL Zertifikaten wohl nichts anfangen, oder kann sie nicht validieren. Da kann ich allerdings nicht mehr weiter behilflich sein. Sorry.
In der php.ini sehe ich [curl] curl.cainfo="C:\Parallels\Plesk\Additional\PHPSettings\cacert.pem"
@liayn Dito.
So, Guys @liayn & @pmb0. Alles gefixt: Die obige Angabe der cacert.pem zeigte ins Nichts. Das entstand durchs PHP Update auf 5.6 vor Monaten. In meiner Serveradministrationsdoku und der alten PHP 5.5 php.ini stand die Lösung: http://curl.haxx.se/ca/cacert.pem herunterladen und im Ordner der php.ini speichern, dann php.ini anpassen: [curl] curl.cainfo = "C:\Parallels\Plesk\Additional\PleskPHP56\cacert.pem" Einmal Application Pool recyceln und schon zeigt https://www.ulc-moedling.at/shariff-backend/?url=https://www.ulc-moedling.at alles an!
Herzlichen Dank für eure Hilfe! #crowdrules
Ok, dann viel Spaß mit dem Shariff-Backend und empfiehl es weiter ;)
Der Vollständigkeit halber: Die bereits geschlossenen Issues habe ich vor dem Öffnen dieses Issues nicht gesehen. Dort weisen einige auf die SSL Problematik von cURL hin – und auf die korrekte und sichere Lösung mit der cacert.pem. Wäre evtl. einen FAQ Eintrag gut.
Hallo,
ich habe das aktuelle Backend auf einem Windows Server 2008 R2 mit PHP 5.6.10 installiert und konfiguriert. Ein Testaufruf von https://www.ulc-moedling.at/shariff-backend/?url=https://www.ulc-moedling.at liefert aber nur
{"pinterest":0}
zurück, obwohl alle Services in der shariff.json sind:Das Cache-Verzeichnis existiert und darin befindet sich im Unterordner Shariff-8a eine Datei namens Shariff-c405a2c5b1796ce4d3d874fa29e33051.dat mit Inhalt {"pinterest":0}
Was könnte der Grund dafür sein, dass kein anderes Service bei uns Daten liefert? Rufe ich die API-Aufrufe der Services, die ich aus den Dateien wie src/Backend/Twitter.php extrahiert habe, manuell im Browser auf, wie z.B. https://cdn.api.twitter.com/1/urls/count.json?url=https://www.ulc-moedling.at liefern diese API-Aufrufe sehr wohl Daten zurück.
Ich würde mich sehr freuen, wenn ich diese Dinge mit eurer Hilfe lösen könnte!