Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SF][SF2][Symfony2] Symfony/CRON/SMS na hostingu, Nie działa obsługa wysyłania smsów
damianooo
post 22.11.2017, 22:09:57
Post #1





Grupa: Zarejestrowani
Postów: 493
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


W metodzie execute klasy Command użyłem skryptu PHP z API wybranej bramki sms:

Poniżej kod mojej klasy CronCommand:

  1. <?php
  2.  
  3. namespace AppBundle\Command;
  4.  
  5. use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
  6. use Symfony\Component\Console\Input\InputArgument;
  7. use Symfony\Component\Console\Input\InputInterface;
  8. use Symfony\Component\Console\Input\InputOption;
  9. use Symfony\Component\Console\Output\OutputInterface;
  10.  
  11. class CronCommand extends ContainerAwareCommand{
  12.  
  13. protected function configure()
  14. {
  15. $this->setName('app:przypominajka')
  16. ->setDescription('Przypomnienie');
  17. }
  18.  
  19. protected function execute(InputInterface $input, OutputInterface $output)
  20. {
  21. $doctrine = $this->getContainer()->get('doctrine');
  22. $em = $doctrine->getEntityManager();
  23.  
  24. $matchdayObject = $em->getRepository('AppBundle:Matchday')->getMatchday();
  25.  
  26. $usersPhones = $em->getRepository('AppBundle:Type')->getNoTypedUsersList($matchdayObject['name']);
  27.  
  28. ini_set("soap.wsdl_cache_enabled", "0");
  29. $client = new SoapClient("http://api.gsmservice.pl/soap/v2/gateway.php?wsdl");
  30. $arAccount = array("login" => "mojlogin","pass" => "mojehaslo");
  31. $arMessages = array(array(
  32. "recipients" => $usersPhones,
  33. "message" => "Przypomnienie",
  34. "sender"=> "Damian",
  35. "msgType" => 1,
  36. "unicode" => false,
  37. "sandbox" => false
  38. ));
  39.  
  40. $client->SendSMS(array("account" => $arAccount,"messages"=> $arMessages))->return;
  41. }
  42. }



Na serwerze hostingowym w katalogu projektu Symfony wykonałem następującego CRONa (aby zweryfikować poprawność) :

  1. /usr/local/bin/php70 /home/dcpl/domains/dc84.pl/app/console app:przypominajka


Po wykonaniu otrzymałem następujący błąd:

  1. [dcpl@s25 dc84.pl]$ /usr/local/bin/php70 /home/dcpl/domains/dc84.pl/app/console app:przypominajka
  2. [Symfony\Component\Debug\Exception\ClassNotFoundException]
  3. Attempted to load class "SoapClient" from namespace "AppBundle\Command".
  4. Did you forget a "use" statement for another namespace?
  5. app:przypominajka [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-s|--shell] [--process-isolation] [-e|--env ENV] [--no-debug] [--] <command>



Wie ktoś może jaką klasę tutaj powinienem zaimportować aby to zadziałało ?

PS. Dodam tylko że support hostingu potwierdził mi że Soap jest zainstalowany na moim koncie:
"SOAP jest uruchomiony na Pana koncie cały czas."
To by się zgadzało bo zwykły testowy plik PHP z powyższym skryptem wysyłającym smsa działa.

Ten post edytował damianooo 22.11.2017, 22:28:19
Go to the top of the page
+Quote Post
ohm
post 22.11.2017, 23:00:31
Post #2





Grupa: Zarejestrowani
Postów: 618
Pomógł: 143
Dołączył: 22.12.2010

Ostrzeżenie: (0%)
-----


No bo nie masz w AppBundle\Command SoapClient, musisz go wrzucić przez
  1. \SoapClient



Go to the top of the page
+Quote Post
damianooo
post 23.11.2017, 09:10:29
Post #3





Grupa: Zarejestrowani
Postów: 493
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


tak ale właśnie jaki namespace mam tam wpisać ?
Jaką ścieżkę dokładnie , jest to w Vendorach a więc będzie Symfony/...coś tam / SoapClient ?

Nie wiem jak to sprawdzić. W necie też nic nie pisze chyba że źle szukam "Symfony SoapClient namespace" ?
Go to the top of the page
+Quote Post
ohm
post 23.11.2017, 09:13:58
Post #4





Grupa: Zarejestrowani
Postów: 618
Pomógł: 143
Dołączył: 22.12.2010

Ostrzeżenie: (0%)
-----


SoapClient jest klasą systemową (czy jak to tam się zwie) i nie ma jako takiego namespace'a

http://symfony2-docs-pl.readthedocs.io/pl/..._extension.html
Go to the top of the page
+Quote Post
damianooo
post 23.11.2017, 14:12:41
Post #5





Grupa: Zarejestrowani
Postów: 493
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Czy li backslash (\) powinien załatwić sprawę .

Tzn zmiast tak:

  1. $client = new SoapClient("http://api.gsmservice.pl/soap/v2/gateway.php?wsdl");


ma być tak:

  1. $client = new \SoapClient("http://api.gsmservice.pl/soap/v2/gateway.php?wsdl");



PS. Sprawdzę w domu smile.gif
Go to the top of the page
+Quote Post
viking
post 23.11.2017, 14:27:58
Post #6





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Albo use SoapClient na początku.


--------------------
Go to the top of the page
+Quote Post
damianooo
post 23.11.2017, 18:04:31
Post #7





Grupa: Zarejestrowani
Postów: 493
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


ehh ani tak ani tak.
Ciągle mam w konsoli ten sam błąd:
Poniżej lokalne wywołanie komendy:

  1. damianoo@CampNou:/var/www/liga_typerow$ php app/console app:przypominajka
  2.  
  3. [Symfony\Component\Debug\Exception\ClassNotFoundException]
  4. Attempted to load class "SoapClient" from the global namespace.
  5. Did you forget a "use" statement?


Mam tak:

  1. <?php
  2.  
  3. namespace AppBundle\Command;
  4.  
  5. use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
  6. use Symfony\Component\Console\Input\InputArgument;
  7. use Symfony\Component\Console\Input\InputInterface;
  8. use Symfony\Component\Console\Input\InputOption;
  9. use Symfony\Component\Console\Output\OutputInterface;
  10. use SoapClient;
  11.  
  12. class CronCommand extends ContainerAwareCommand{
  13.  
  14. protected function configure()
  15. {
  16. $this->setName('app:przypominajka')
  17. ->setDescription('Przypomnienie o typowaniu');
  18. }
  19.  
  20. protected function execute(InputInterface $input, OutputInterface $output)
  21. {
  22. $doctrine = $this->getContainer()->get('doctrine');
  23. $em = $doctrine->getEntityManager();
  24.  
  25. $matchdayObject = $em->getRepository('AppBundle:Matchday')->getMatchday();
  26.  
  27. // pobranie listy numerów tel. użytkowników, którzy jeszcze nie wytypowali
  28. $usersPhones = $em->getRepository('AppBundle:Type')->getNoTypedUsersList($matchdayObject['name']);
  29.  
  30. ini_set("soap.wsdl_cache_enabled", "0");
  31. $client = new SoapClient("http://api.gsmservice.pl/soap/v2/gateway.php?wsdl");
  32. $arAccount = array("login" => "mojlogin","pass" => "mojehaslo");
  33. $arMessages = array(array(
  34. "recipients" => $usersPhones,
  35. "message" => "FC Barcelona rządzi :) ",
  36. "sender"=> "Damian",
  37. "msgType" => 1,
  38. "unicode" => false,
  39. "sandbox" => false
  40. ));
  41.  
  42. // wysłanie smsów o ustalonym w CRON terminie
  43. $client->SendSMS(array("account" => $arAccount,"messages"=> $arMessages))->return;
  44.  
  45. }
  46. }


albo tak:


  1. <?php
  2.  
  3. namespace AppBundle\Command;
  4.  
  5. use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
  6. use Symfony\Component\Console\Input\InputArgument;
  7. use Symfony\Component\Console\Input\InputInterface;
  8. use Symfony\Component\Console\Input\InputOption;
  9. use Symfony\Component\Console\Output\OutputInterface;
  10.  
  11. class CronCommand extends ContainerAwareCommand{
  12.  
  13. protected function configure()
  14. {
  15. $this->setName('app:przypominajka')
  16. ->setDescription('Przypomnienie o typowaniu');
  17. }
  18.  
  19. protected function execute(InputInterface $input, OutputInterface $output)
  20. {
  21. $doctrine = $this->getContainer()->get('doctrine');
  22. $em = $doctrine->getEntityManager();
  23.  
  24. $matchdayObject = $em->getRepository('AppBundle:Matchday')->getMatchday();
  25.  
  26. // pobranie listy numerów tel. użytkowników, którzy jeszcze nie wytypowali
  27. $usersPhones = $em->getRepository('AppBundle:Type')->getNoTypedUsersList($matchdayObject['name']);
  28.  
  29. ini_set("soap.wsdl_cache_enabled", "0");
  30. $client = new \SoapClient("http://api.gsmservice.pl/soap/v2/gateway.php?wsdl");
  31. $arAccount = array("login" => "mojlogin","pass" => "mojehaslo");
  32. $arMessages = array(array(
  33. "recipients" => $usersPhones,
  34. "message" => "FC Barcelona rządzi :) ",
  35. "sender"=> "Damian",
  36. "msgType" => 1,
  37. "unicode" => false,
  38. "sandbox" => false
  39. ));
  40.  
  41. // wysłanie smsów o ustalonym w CRON terminie
  42. $client->SendSMS(array("account" => $arAccount,"messages"=> $arMessages))->return;
  43.  
  44. }
  45. }
  46.  
  47.  



Mówicie że to klasa systemowa i nie ma namespace ... hmm coś chyba musi jednak być ... można to jakoś zddebuggować żeby zweryfikować jak z Symfony powinienem się do tego dobrać ?

PS. Wyczyściłem dokładnie cache aplikacji.

Ten post edytował damianooo 23.11.2017, 18:06:17
Go to the top of the page
+Quote Post
ohm
post 23.11.2017, 18:13:51
Post #8





Grupa: Zarejestrowani
Postów: 618
Pomógł: 143
Dołączył: 22.12.2010

Ostrzeżenie: (0%)
-----


sprawdz przez php -m czy na pewno masz ten modul dla cli zaladowany
Go to the top of the page
+Quote Post
damianooo
post 23.11.2017, 20:01:36
Post #9





Grupa: Zarejestrowani
Postów: 493
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


ok sprawdziłem na serwerze hostingowym i zadziałało.
U mnie lokalnie nie miałem Soapa włączonego i dlatego był problem.

Dzięki za pomoc!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.04.2024 - 21:37