Mój skrypt nie widzi klas i rzuca następującym błędem:
Fatal error: Class 'Client' not found in C:\VertrigoServ\www\Stomp\stomp.php on line ...
// include a library require_once("src\Client.php"); require_once("src\SimpleStomp.php"); require_once("src\Protocol\Protocol.php"); require_once("src\Protocol\Version.php"); require_once("src\Transport\Frame.php"); require_once("src\Transport\Message.php"); http://www.php.net/echo "TEST połączenia w protokole STOMP"; http://www.php.net/echo "<br />"; // make a connection $stomp = new Client("tcp://localhost:8080");
namespace Stomp; use Stomp\Exception\ConnectionException; use Stomp\Exception\MissingReceiptException; use Stomp\Exception\StompException; use Stomp\Exception\UnexpectedResponseException; use Stomp\Network\Connection; use Stomp\Protocol\Protocol; use Stomp\Protocol\Version; use Stomp\Transport\Frame; /** * Stomp Client * * This is the minimal implementation of a Stomp Client, it allows to send and receive Frames using the Stomp Protocol. * * @package Stomp * @author Hiram Chirino <hiram@hiramchirino.com> * @author Dejan Bosanac <dejan@nighttale.net> * @author Michael Caplan <mcaplan@labnet.net> * @author Jens Radtke <swefl.oss@fin-sn.de> */ class Client { /** * Perform request synchronously * * @var boolean */ private $sync = true;
$stomp = new \Stomp\Client("tcp://localhost:8080");
przeniosłem skrypt do katalogu "src" i teraz mam tak w skrypcie stomp.php :
// include a library require_once("Client.php"); http://www.php.net/echo "TEST połączenia w protokole STOMP"; http://www.php.net/echo "<br />"; // make a connection $stomp = new \Stomp\Client("tcp://localhost:8080");
Fatal error: Class 'Stomp\Protocol\Version' not found in C:\VertrigoServ\www\Stomp\src\stomp.php on line 10
$stomp = new \Stomp\Client("tcp://localhost:8080");
namespace Stomp; use Stomp\Protocol\Version;
use Stomp\src\Protocol\Version
Fatal error: Class 'Stomp\src\Protocol\Version' not found in C:\VertrigoServ\www\Stomp\src\stomp.php on line 10
A po co cokolwiek przenosiłeś? Miało zostać tak jak miałeś i tylko zmienić tą 1 rzecz.
Nie używasz autoloadera więc każdą klasę która jest używana musi być dołączona
też tak robiłem ale i tak był kolejny błąd taki jak pisałem w ostatnim poście.
Wyciąłem teraz kod z klasami z katalogu "src" i zapisałem na serwerze www w katalogu "Stomp" i tam też jest mój skrypt.
Mam teraz tak jak poniżej i wydaje się że w końcu po Bożemu
www/Stomp/stomp.php www/Stomp/Client.php www/Stomp/Protocol/Version.php itd.
https://github.com/stomp-php/stomp-php
Fatal error: Class 'Stomp\Protocol\Version' not found in C:\VertrigoServ\www\Stomp\stomp.php on line 10
Zainstaluj composer https://getcomposer.org
dołącz plik `vendor/autoload.php` do swojego pliku i zainstaluj tą libkę tak jak jest opisane na GitHub
Jednak nie wchodzi w grę autoloader i composer ze względów polityki firmy ale nie ważne ..
Próbuję to zrobić bez tego i tak:
Mam taką strukturę katalogów:
www/Stomp/stomp.php (to jest mój skrypt) www/Stomp/Client.php www/Stomp/Protocol/Version.php itd.
require_once("Client.php"); $stomp = new \Stomp\Client("tcp://localhost:8080");
namespace Stomp; ... use Stomp\Exception\UnexpectedResponseException; use Stomp\Network\Connection; ... class Client { ... private $versions = [Version::VERSION_1_0, Version::VERSION_1_1, Version::VERSION_1_2]; ... if ($frame = $this->getConnectedFrame()) { $version = new Version($frame); ...
Fatal error: Class 'Stomp\Protocol\Version' not found in C:\VertrigoServ\www\Stomp\stomp.php on line 4
<?php function autoload($className) { $className = http://www.php.net/ltrim($className, '\\'); $fileName = ''; $namespace = ''; if ($lastNsPos = http://www.php.net/strrpos($className, '\\')) { $namespace = http://www.php.net/substr($className, 0, $lastNsPos); $className = http://www.php.net/substr($className, $lastNsPos + 1); $fileName = http://www.php.net/str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; } $fileName .= http://www.php.net/str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; require $fileName; } spl_autoload_register('autoload'); $stomp = new \Stomp\Client("tcp://localhost:8080");
hmm , a więc da się to też tak zrobić ok ...
ale użyłem Twojego kodu i mam takie dwa błędy więc coś jeszcze nie tak:
Warning: require(Stomp\Client.php): failed to open stream: No such file or directory in C:\VertrigoServ\www\Stomp\stomp.php on line 15
Fatal error: require(): Failed opening required 'Stomp\Client.php' (include_path='.;C:\VertrigoServ\Smarty') in C:\VertrigoServ\www\Stomp\stomp.php on line 15
function myClassLoader($className){ http://www.php.net/echo 'Ładuję klasę '.$className.'<br/>'; require('./'.$className.'.php'); // Zwróć "true", informując, że klasa została znaleziona. return true; } // end myClassLoader(); spl_autoload_register('myClassLoader'); $stomp = new \Stomp\Client("tcp://localhost:8080");
No masz błędy wyraźne teraz musisz sobie poprawić to. Debuguj, sprawdzaj
ok udało mi się composerem zainstalować tą bibliotekę.
composer install wykonałem z katalogu na który wskazuje PATH systemowy a więc z c:\ProgramData\ComposerSetup\bin\
Teraz mam tam katalog vendor a w nim katalog composer , katalog z biblioteką stomp-php oraz plik autoload.php
Skopiowałem więc cały katalog vendor do mojego projektu na serwerze www a więc do c:\VertrigoServ\www\dc\ , umieściłem w nim mój skrypt stomp.php , który teraz ma jedną linię kodu:
$stomp = new Client("tcp://localhost:8080");
Fatal error: Class 'Client' not found in C:\VertrigoServ\www\dc\stomp.php on line 3
c:\VertrigoServ\www\dc\vendor c:\VertrigoServ\www\dc\vendor\composer c:\VertrigoServ\www\dc\vendor\stomp-php c:\VertrigoServ\www\dc\vendor\stomp-php\stomp-php c:\VertrigoServ\www\dc\vendor\stomp-php\stomp-php\src c:\VertrigoServ\www\dc\vendor\stomp-php\stomp-php\src\Client.php c:\VertrigoServ\www\dc\vendor\autoload.php c:\VertrigoServ\www\dc\stomp.php
ok tak zrobiłem i mam teraz tak jak pisałeś a więc:
c:\VertrigoServ\www\dc\Protocol c:\VertrigoServ\www\dc\Network c:\VertrigoServ\www\dc\Client.php c:\VertrigoServ\www\dc\autoload.php c:\VertrigoServ\www\dc\stomp.php
Fatal error: Class 'Client' not found in C:\VertrigoServ\www\dc\stomp.php on line 3
// autoload.php @generated by Composer require_once __DIR__ . '/composer/autoload_real.php'; return ComposerAutoloaderIniteedd29babb5302c6f0ff68b11e9edd49::getLoader();
Pokaz jeszcze w calosci ten swoj plik stomp.php
Tłumaczę ostatni raz... Więcej nie będę.
1. Utwórz katalog
2. zainstalu composera
3. W poprzednio wykonanym katalogu uruchom `composer require stomp-php/stomp-php`
4. utwórz plik stomp.php:
<?php include 'vendor/autoload.php'; $stomp = new \Stomp\Client("tcp://localhost:8080");
ok działa dzięki.
Sorry za głupie pytania ... po prostu za dużo nie używałem composera.
W sumie miałem "prawie" dobrze ...
Instalowałem po prostu libkę w innym miejscu i całość później przeniosłem.
Poza tym w kodzie w wywołaniu klasy Client nie podałem dokładnej ścieżki i nie zaincludowałem autoloadera ...
Dzięki raz jeszcze za pomoc.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)