Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z błędem ze skryptu
Forum PHP.pl > Forum > Przedszkole
szulczyk
Witam,

Mam problem z pewną aplikacją webową, wszystko działało ok. Jednak od wczoraj podczas wykonywania skryptu *.bat , wyskakuje następujący komunikat :

D:\Scripts\xyz.pl>D:\Wapp\php\php.exe -f D:\Wapp\apache2\htdocs\aplikacja.xyz.pl\cron\scheduledTaskSet.php parameter1=m

PHP Fatal Error : Call to a member function query<> on a non-object in D:\Wapp\apache2\htdocs\aplikacja.xyz.pl\cron\scheduledTaskSet.php on line 17

Poniżej kod od 1 do 26 linijki z pliku scheduledTaskSet.php

Kod
<?php


include('D:\\Wapp\\apache2\\htdocs\\aplikacja.xyz.pl\\misc\\functions.php');
require_once('D:\\Wapp\\apache2\\htdocs\\aplikacja.xyz.pl\\misc\\class.phpmailer.php');
require_once('D:\\Wapp\\apache2\\htdocs\\aplikacja.xyz.pl\\misc\\class.smtp.php');

$xmlPotentials=simplexml_load_file('D:\\Wapp\\apache2\\htdocs\\aplikacja.xyz.pl\\language\\pl\\potentials.xml');

if($argc>1)
    parse_str(implode('&',array_slice($argv,1)),$_GET);

switch($_GET["parameter1"])
{
    case "m":
        //mailSend
     17 linia ->   $tempMails=$dbMaster->query(
        
        "SELECT
        *
        FROM
        fl_mail
        INNER JOIN fl_user ON user_id = mail_recipient_userid
        WHERE
        mail_issent = false"
        )->fetchAll(PDO::FETCH_ASSOC);[code]
viking
$dbMaster nie jest obiektem czyli np. nie nawiązano połączenia z bazą.
szulczyk
Cytat(viking @ 1.02.2017, 10:32:54 ) *
$dbMaster nie jest obiektem czyli np. nie nawiązano połączenia z bazą.


Skoro wcześniej to działało to co mogło się stać ,że nagle przestało działać?
viking
Sprawdź w logach.
Lion
Prawdopodobnie include nie znajduje pliku.
szulczyk
Ok ,udało mi się rozwiązać , include faktycznie nie widziało pliku.

Jednak mam jeszcze jedno pytanie o wysyłanie maili za pomocą php Mailer poniżej fragment kodu :

  1.  
  2. foreach($tempMails as $mailRow)
  3. {
  4. $mail =new PHPMailer();
  5. $mail->SetLanguage("pl");
  6. $mail->IsSMTP(); // send via SMTP
  7. $mail->CharSet ="UTF-8";
  8. $mail->Host ="poprawny adres IP"; // SMTP servers
  9. $mail->SMTPAuth=false; //
  10. $mail->Port =25;
  11. switch($mailRow["mail_senderid"])
  12. {
  13. case 1:
  14. $mail->From ="it@xyz.pl";
  15. $mail->FromName="XYZ";
  16. break;
  17. case 2:
  18. $mail->From ="XYZ@xyz.pll";
  19. $mail->FromName="Office";
  20. break;
  21. default:
  22. $mail->From ="it@xyzl.pl";
  23. $mail->FromName="XYZ";
  24. break;
  25. }
  26.  



Powyższy kod powinien wysyłać maila , niestety maile przestały przychodzić.

Można gdzieś sprawdzić z jakiego powodu? Nie siedzę w tym temacie na codzień więc chciałbym prosić o wskazówki.

Z poziomu serwera pocztowego z IP wpisanym wyzej wysyłają się maila jak zrobię test, każdy tez z tych adresów mailowych istnieje.

Czy ta funkcja new PHPMailer(); gdzieś ma oddzielne logi? Czy to po prostu już jest domyślna biblioteka?

Chciałbym po prostu sprawdzić dlaczego te maila się nie wysyłają smile.gif
viking
$mail->errorInfo albo wyjątki.
szulczyk
Jak się dostać , gdzie to znajdę : $mail->errorInfo ?

Korzystam z WampStack
viking
To już raczej podstawy programowania obiektowego. Możesz sobie gdzieś wrzucić w kodzie file_put_contents(var_export($mail->ErrorInfo));
szulczyk
W logach Apache mam tylko coś takiego :

[Tue Feb 07 09:34:28.572998 2017] [ssl:warn] [pid 2780:tid 508] AH01909: localhost:444:0 server certificate does NOT include an ID which matches the server name
[Tue Feb 07 09:34:28.854242 2017] [ssl:warn] [pid 2780:tid 508] AH01909: localhost:444:0 server certificate does NOT include an ID which matches the server name
[Tue Feb 07 09:34:28.869866 2017] [mpm_winnt:notice] [pid 2780:tid 508] AH00455: Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.5.27 configured -- resuming normal operations
[Tue Feb 07 09:34:28.869866 2017] [mpm_winnt:notice] [pid 2780:tid 508] AH00456: Apache Lounge VC11 Server built: Jan 28 2015 16:48:40
[Tue Feb 07 09:34:28.869866 2017] [core:notice] [pid 2780:tid 508] AH00094: Command line: 'D:\\Wapp\\apache2\\bin\\httpd.exe -d D:/Wapp/apache2 -f D:/Wapp/apache2\\conf\\httpd.conf'
[Tue Feb 07 09:34:28.885751 2017] [mpm_winnt:notice] [pid 2780:tid 508] AH00418: Parent: Created child process 5148
AH00548: NameVirtualHost has no effect and will be removed in the next release D:/Wapp/apache2/conf/extra/httpd-vhosts.conf:1
[Tue Feb 07 09:34:30.080203 2017] [ssl:warn] [pid 5148:tid 420] AH01909: localhost:444:0 server certificate does NOT include an ID which matches the server name
[Tue Feb 07 09:34:30.345814 2017] [ssl:warn] [pid 5148:tid 420] AH01909: localhost:444:0 server certificate does NOT include an ID which matches the server name
[Tue Feb 07 09:34:30.377068 2017] [mpm_winnt:notice] [pid 5148:tid 420] AH00354: Child: Starting 64 worker threads.


Nie wiem czy to może mieć coś wspólnego?Żadnych innych błędów nie ma aplikacja działa poprawnie, w momencie np wpisywania nowego gościa powinna wysyłać e-maila nie wysyła sad.gif
viking
No to wyświetl za pomocą ErrorInfo w skrypcie wiadomość o błędzie. Naprawdę żeby tak topornie z tym szło...
szulczyk
U mnie to wygląda tak ,że batch ,który wykonuje coś takiego "D:\Wapp\php\php.exe -f D:\Wapp\apache2\htdocs\xyz.pl\cron\scheduledTaskSet.php parameter1=m "

W pliku scheduledTaskSet.php mogę umieścić na samym poczatku ten poniższy kod zaraz po <php ?

  1. file_put_contents(var_export($mail->ErrorInfo));


Ten kod

  1. foreach($tempMails as $mailRow)
  2. {
  3. $mail =new PHPMailer();
  4. $mail->SetLanguage("pl");
  5. $mail->IsSMTP(); // send via SMTP
  6. $mail->CharSet ="UTF-8";
  7. $mail->Host ="poprawny adres IP"; // SMTP servers
  8. $mail->SMTPAuth=false; //
  9. $mail->Port =25;
  10. switch($mailRow["mail_senderid"])
  11. {
  12. case 1:
  13. $mail->From ="it@xyz.pl";
  14. $mail->FromName="XYZ";
  15. break;
  16. case 2:
  17. $mail->From ="XYZ@xyz.pll";
  18. $mail->FromName="Office";
  19. break;
  20. default:
  21. $mail->From ="it@xyzl.pl";
  22. $mail->FromName="XYZ";
  23. break;
  24. }
  25.  


pochodzi własnie z tego pliku scheduledTaskSet.php . Zadaje podstawowe pytanie bo jestem zielony w temacie smile.gif i dopiero zaczynam się uczyć
viking
W tym kodzie to nawet nie ma wysyłki (metoda send). A file_put_contents wymaga jeszcze nazwy pliku. Sprawdź w dokumentacji jak używać.
szulczyk
Poniżej cały kod , jest metoda send.

  1.  
  2. <?php
  3.  
  4.  
  5.  
  6.  
  7. include('D:\\Wapp\\apache2\\htdocs\\xyz.pl\\misc\\3.php');
  8. include('D:\\Wapp\\apache2\\htdocs\\xyz.pl\\misc\\functions.php');
  9. require_once('D:\\Wapp\\apache2\\htdocs\\xyz.pl\\misc\\class.phpmailer.php');
  10. require_once('D:\\Wapp\\apache2\\htdocs\\xyz.pl\\misc\\class.smtp.php');
  11.  
  12.  
  13.  
  14.  
  15.  
  16. $xmlPotentials=simplexml_load_file('D:\\Wapp\\apache2\\htdocs\\xyz.pl\\language\\pl\\potentials.xml');
  17.  
  18. if($argc>1)
  19. parse_str(implode('&',array_slice($argv,1)),$_GET);
  20.  
  21. switch($_GET["parameter1"])
  22. {
  23. case "m":
  24. //mailSend
  25. $tempMails=$dbMaster->query(
  26. "
  27. SELECT
  28. *
  29. FROM
  30. fl_mail
  31. INNER JOIN fl_user ON user_id = mail_recipient_userid
  32. WHERE
  33. mail_issent = false
  34. ")->fetchAll(PDO::FETCH_ASSOC);
  35.  
  36. foreach($tempMails as $mailRow)
  37. {
  38. $mail =new PHPMailer();
  39. $mail->SetLanguage("pl");
  40. $mail->IsSMTP(); // send via SMTP
  41. $mail->CharSet ="UTF-8";
  42. $mail->Host ="192.168.1.5"; // SMTP servers
  43. $mail->SMTPAuth=false; // turn on SMTP authentication
  44. $mail->Port =25;
  45. switch($mailRow["mail_senderid"])
  46. {
  47. case 1:
  48. $mail->From ="it@xyz.pl";
  49. $mail->FromName="xyz";
  50. break;
  51. case 2:
  52. $mail->From ="office.plwa@xyz.pl";
  53. $mail->FromName="xyze";
  54. break;
  55. default:
  56. $mail->From ="it@xyz.pl";
  57. $mail->FromName="xyz";
  58. break;
  59. }
  60. $mail->AddAddress($mailRow["user_mail"]);
  61. $mail->WordWrap=80; // set word wrap
  62. $mail->IsHTML(true); // send as HTML?
  63. $mail->Subject =$mailRow["mail_subject"];
  64. $mail->Body =$mailRow["mail_body"];
  65. if($mailRow["mail_senderid"]<0)
  66. {
  67. $tempMailIsSent=$dbMaster->query(
  68. "
  69. UPDATE fl_mail
  70. SET
  71. mail_issent = true,
  72. mail_sent_datetime = 'n/a'
  73. WHERE
  74. mail_id = ".$mailRow["mail_id"]."
  75. ");
  76. }
  77. else
  78. {
  79. $mail->Send();
  80. $tempMailIsSent=$dbMaster->query(
  81. "
  82. UPDATE fl_mail
  83. SET
  84. mail_issent = true,
  85. mail_sent_datetime = '".date("Y-m-d H:i:s")."'
  86. WHERE
  87. mail_id = ".$mailRow["mail_id"]."
  88. ");
  89. }
  90. }
  91. //mealReminder
  92. if(date("H:i")=="10:10")
  93. {
  94. $mealOrder =$dbMaster->query(
  95. "
  96. SELECT
  97. *
  98. FROM
  99. fl_meal_order
  100. WHERE
  101. meal_order_delivery_datetime = '".date("Y-m-d")."'
  102. AND meal_order_statusid = 1
  103. ")->fetchAll(PDO::FETCH_ASSOC);
  104. $tempSubject=$xmlPotentials->functions->office->subfunctions->meals72->orderNotification->noPaymentReminder->subject;
  105. $tempBody =$xmlPotentials->functions->office->subfunctions->meals72->orderNotification->newMeal->header1;
  106. $tempBody.="<br/>";
  107. $tempBody.="<br/>";
  108. $tempBody.=$xmlPotentials->functions->office->subfunctions->meals72->orderNotification->noPaymentReminder->body1;
  109. $tempBody.="<br/>";
  110. $tempBody.="<br/>";
  111. $tempBody.=str_replace("br","<br/>",$xmlPotentials->functions->office->subfunctions->meals72->orderNotification->footer1);
  112.  
  113. foreach($mealOrder as $rowOrder)
  114. {
  115. sendMail($tempSubject,$tempBody,$rowOrder["meal_order_userid"]);
  116. }
  117. }
  118.  
  119. if(date("H:i")=="10:15")
  120. {
  121. $mealOrder =$dbMaster->query(
  122. "
  123. SELECT
  124. *
  125. FROM
  126. fl_meal_order
  127. WHERE
  128. meal_order_delivery_datetime = '".date("Y-m-d")."'
  129. AND meal_order_statusid = 1
  130. ")->fetchAll(PDO::FETCH_ASSOC);
  131. $tempSubject=$xmlPotentials->functions->office->subfunctions->meals72->orderNotification->noPaymentReminder->subject;
  132. $tempBody =$xmlPotentials->functions->office->subfunctions->meals72->orderNotification->newMeal->header1;
  133. $tempBody.="<br/>";
  134. $tempBody.="<br/>";
  135. $tempBody.=$xmlPotentials->functions->office->subfunctions->meals72->orderNotification->noPaymentReminder->body2;
  136. $tempBody.="<br/>";
  137. $tempBody.="<br/>";
  138. $tempBody.=str_replace("br","<br/>",$xmlPotentials->functions->office->subfunctions->meals72->orderNotification->footer1);
  139.  
  140. foreach($mealOrder as $rowOrder)
  141. {
  142. sendMail($tempSubject,$tempBody,$rowOrder["meal_order_userid"]);
  143. $mealOrderUpdate=$dbMaster->query(
  144. "
  145. UPDATE
  146. fl_meal_order
  147. SET meal_order_statusid = 6
  148. WHERE
  149. meal_order_id = ".$rowOrder["meal_order_id"]."
  150. ");
  151. }
  152. }
  153. if(date("H:i")=="01:00")
  154. {
  155. $localCSVPath ='D:\\Roger\\Events\\02_CSV\\01_Uploaded\\';
  156. $localCSVPathProcessed='D:\\Roger\\Events\\02_CSV\\02_Processed\\';
  157. $localCSVFiles =scandir($localCSVPath);
  158.  
  159. $localXMLPath ='D:\\Roger\\Events\\01_XML\\01_Uploaded\\';
  160. $localXMLPathProcessed='D:\\Roger\\Events\\01_XML\\02_Processed\\';
  161. $localXMLFiles =scandir($localXMLPath);
  162.  
  163. $tempErrors="";
  164. foreach($localXMLFiles as $rowFile)
  165. {
  166. if(substr($rowFile,-3)=="xml")
  167. {
  168.  
  169. $xmlFile=simplexml_load_file($localXMLPath.$rowFile);
  170. foreach($xmlFile->tables->table->rows->row as $row)
  171. {
  172. $fl_worktimeInsert=$dbMaster->prepare(
  173. "
  174. INSERT INTO fl_worktime
  175. (
  176. worktime_rogeruniqueid,
  177. worktime_rogerid,
  178. worktime_datetime,
  179. worktime_code,
  180. worktime_rogeruserid,
  181. worktime_rogeruserguid,
  182. worktime_readerid,
  183. worktime_doortype,
  184. worktime_modificationreason,
  185. worktime_importdatetime,
  186. worktime_importfilename
  187. )
  188. VALUES
  189. (
  190. '".$row->f[0]."',
  191. '".$row->f[1]."',
  192. '".$row->f[2]." ".$row->f[3]."',
  193. '".$row->f[4]."',
  194. '".$row->f[5]."',
  195. '".$row->f[6]."',
  196. '".$row->f[7]."',
  197. '".$row->f[8]."',
  198. '".$row->f[10]."',
  199. '".date("Y-m-d H:i:s")."',
  200. '".$rowFile."'
  201. )
  202. ");
  203. if($fl_worktimeInsert->execute())
  204. {
  205.  
  206. }
  207. else
  208. {
  209. $tempErrors.=$rowFile.";".$row->f[0]."<br/>";
  210. }
  211. }
  212. rename($localXMLPath.$rowFile,$localXMLPathProcessed.$rowFile);
  213. sendMail("Roger Processing",$tempErrors,10);
  214. }
  215. }
  216. }
  217. break;
  218. default:
  219.  
  220. break;
  221. }
  222. ?>
  223.  


Gdzie najlepiej wstawić to :file_put_contents(var_export($mail->ErrorInfo)) ?
viking
http://stackoverflow.com/a/31273076
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.