Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите наладить скрипт

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: PHP скрипт
dima681
Отправлено: 22 Августа, 2014 - 07:04:26
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




уважаемые гуру помогите разобраться в скрипте при работе его выдаёт ошибку команды MakeCopy

описание работы скрипта
Принцип работы состоит в следующем: в процессе генерации писем в письмо вставляется ссылки на Web сервер, на котором установлен специальный скрипт накапливающий статистику.
Для получения информации об открытых письмах в конец письма вставляю ссылку на невидимую картинку, которая должна скачиваться с сервера. Когда получатель открывает письмо, его почтовый клиент автоматически пошлет запрос на сервер чтобы скачать картинку. Скрипт отследит этот запрос и на основании этих данных возможно построение списков получателей, открывших ваше письмо. Получателю все эти операции не видны.

сам скрипт

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. //--------- WebForm Messages -----------------
  3. $Form_Submit_Error="<br>Введен не корректный E-Mail адрес<br>Пожалуйста, введите правильный E-Mail для успешной отправки формы";
  4. $Form_Submit_OK="<br>Спасибо.<br>Ваш запрос обрабатывается.<br>Вы получите запрос на подтверждение подписки на указанный e-mail";
  5. $Confirmation_Link_Click="<br>Подтверждение получено, спасибо !";
  6. // Note: Confirmation_Link_Click is showed ONLY if Redirect URL is empty !
  7. //------------------------------ --------------
  8. if(isset($_GET["GID"]))
  9. $GroupID = $_GET["GID"];
  10. else
  11. $GroupID = -1;
  12. if(isset($_GET["MLID"]))
  13. $MailingID = $_GET["MLID"];
  14. else
  15. $MailingID = -1;
  16. if(isset($_GET["MSID"]))
  17. $MessageID = $_GET["MSID"];
  18. else
  19. $MessageID = -1;
  20. if(isset($_GET["EML"]))
  21. $RcptEmail = $_GET["EML"];
  22. else
  23. $RcptEmail = "no_email";
  24. if(isset($_GET["MCPY"]))
  25. $MakeCopy = $_GET["MCPY"];
  26. else
  27. $MakeCopy = 0;
  28. if(isset($_GET["GCPY"]))
  29. $GetCopy = $_GET["GCPY"];
  30. else
  31. $GetCopy = 0;
  32. if(isset($_GET["RD"]) && $_GET["RD"]!="no_redir")
  33. $RedirURL = $_GET["RD"];
  34. else
  35. $RedirURL="nourl";
  36. if(isset($_POST["FormID"]))
  37. $FormName = $_POST["FormID"];
  38. else
  39. $FormName = "no_form";
  40. if(!isset($_GET["PID"]) && !isset($_POST["FormProgID"]))
  41. {
  42. echo "Unknown ProgramID";
  43. }
  44. else
  45. {
  46. if(isset($_GET["PID"]))
  47. $ProgID = $_GET["PID"];
  48. else
  49. $ProgID = $_POST["FormProgID"];
  50. }
  51. if($FormName!="no_form")
  52. {
  53. if(isset($_POST["FormEmail"]) && !empty($_POST["FormEmail"]))
  54. {
  55. $Form_Email = $_POST["FormEmail"];
  56. if((preg_match("/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/",$Form_Email)) or (!preg_match("/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,6}|[0-9]{1,3})(\]?)$/",$Form_Email)))
  57. {
  58. echo "<html><head><title>Submit failed</title></head><body BGCOLOR=\"#E6E6E6\"><div align=\"center\"><FONT color=\"#003399\"$Form_Submit_Error</FONT></div></body></html>";
  59. }
  60. }
  61. else
  62. {
  63. echo "<html><head><title>Submit failed</title></head><body BGCOLOR=\"#E6E6E6\"><div align=\"center\"><FONT color=\"#003399\"$Form_Submit_Error</FONT></div></body></html>";
  64. }
  65. }
  66. if(isset($_POST["FormFullName"]) && !empty($_POST["FormFullName"]))
  67. $Form_FullName = $_POST["FormFullName"];
  68. else
  69. $Form_FullName = "no_form_fullname";
  70.  
  71. //------------------------------ -------------------------------- ---
  72. function HtmlEntDecode($text)
  73. {
  74. $str = '';
  75. $i = 0;
  76. while ($i < strlen($text))
  77. {
  78. if ($i < strlen($text) - 1 && substr($text, $i, 2) == "&#")
  79. {
  80. $chr = '';
  81. $i += 2;
  82. while ($i < strlen($text) && substr($text, $i, 1) != ";")
  83. {
  84. $chr .= substr($text, $i, 1);
  85. $i++;
  86. }
  87. if (strlen($chr) > 0)
  88. {
  89. $str .= utf8_chr($chr);
  90. }
  91. }
  92. else
  93. {
  94. $str .= substr($text, $i, 1);
  95. }
  96. $i++;
  97. }
  98. return $str;
  99. }
  100.  
  101. //------------------------------ -------------------------------- ------
  102.  
  103. function utf8_chr($code)
  104. {
  105. if($code<128) return chr($code);
  106. else if($code<2048) return chr(($code>>6)+192).chr(($code&63)+128);
  107. else if($code<65536) return chr(($code>>12)+224).chr((($code>>6)&63)+128).chr(($code&63)+128);
  108. else if($code<2097152) return chr($code>>18+240).chr((($code>>12)&63)+128).chr(($code>>6)&63+128).chr($code&63+128);
  109. }
  110. //------------------------------ -------------------------------- ------
  111.  
  112. if($MakeCopy == 1)
  113. {
  114. if(file_exists($ProgID.'.log'))
  115. {
  116. if(!copy($ProgID.'.log',$ProgID.'.out'))
  117. {
  118. echo "Error: Can't create output file. Permission denied.";
  119. }
  120. $LogFile = fopen($ProgID.'.log', 'w');
  121. if(!$LogFile)
  122. {
  123. echo "Error: Can't update input file. Permission denied.";
  124. }
  125. flock($LogFile, 2);
  126. ftruncate($LogFile,0);
  127. flock($LogFile, 3);
  128. fclose($LogFile);
  129. echo "cmd_ok";
  130. }
  131. else
  132. {
  133. echo 'Error: No File';
  134. }
  135. }
  136. else if($GetCopy == 1)
  137. {
  138. if(file_exists($ProgID.'.out'))
  139. {
  140. $LogFile = fopen($ProgID.'.out', 'r');
  141. if(!$LogFile)
  142. {
  143. echo "Error: Cant open out file";
  144. }
  145. flock($LogFile, 2);
  146. while(!feof($LogFile))
  147. {
  148. $Buffer = fgets($LogFile, 4096);
  149. echo $Buffer;
  150. }
  151. flock($LogFile, 3);
  152. fclose($LogFile);
  153. echo "cmd_ok";
  154. }
  155. else
  156. {
  157. echo "Error: No File";
  158. }
  159. }
  160. else
  161. {
  162. $today = getdate() ;
  163. $LogFile = fopen($ProgID.'.log', 'ab');
  164. if(!$LogFile)
  165. {
  166. echo "Error: Can't open log file. Permission denied.";
  167. }
  168. flock($LogFile, 2);
  169. if(stristr($ProgID,"AMS_"))
  170. {
  171. $OutString="$MailingID:$GroupID:$RcptEmail:$RedirURL;".$today['year'].":".$today['mon'].":".$today['mday'].":".$today['hours'].":".$today['minutes']."\r\n";
  172. }
  173. else if(stristr($ProgID,"MPC_"))
  174. {
  175. if($FormName=="no_form")
  176. {
  177. $OutString="Confirm_Data=$MessageID:".$today['year'].":".$today['mon'].":".$today['mday'].":".$today['hours'].":".$today['minutes'].";\r\n";
  178. if($RedirURL=="nourl")
  179. echo "<html><head><title>Submit Completed</title></head><body BGCOLOR=\"#E6E6E6\"><div align=\"center\"><FONT color=\"#003399\"$Confirmation_Link_Click</FONT></div></body></html>";
  180. }
  181. else
  182. {
  183. $OutString="Form_Data=$FormName:".HtmlEntDecode($Form_FullName).":$Form_Email:".$today['year'].":".$today['mon'].":".$today['mday'].":".$today['hours'].":".$today['minutes'].";\r\n";
  184. echo "<html><head><title>Submit Completed</title></head><body BGCOLOR=\"#E6E6E6\"><div align=\"center\"><FONT color=\"#003399\"$Form_Submit_OK</FONT></div></body></html>";
  185. }
  186. }
  187. fwrite($LogFile,$OutString);
  188. fflush($LogFile);
  189. flock($LogFile, 3);
  190. fclose($LogFile);
  191. }
  192. if($RedirURL != "nourl")
  193. {
  194. {
  195. header("Location: $RedirURL");
  196. }
  197. }
  198. ?>


Отредактировано модератором: Мелкий, 22 Августа, 2014 - 09:36:42
 
 Top
tato
Отправлено: 22 Августа, 2014 - 07:14:35
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




Оберните скрипт в положеный тэг, иначе смотреть никто не будет.


-----
просто ?: сложно
 
 Top
dima681
Отправлено: 22 Августа, 2014 - 08:40:34
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




tato пишет:
Оберните скрипт в положеный тэг, иначе смотреть никто не будет.

а как это сделать
 
 Top
dcc0
Отправлено: 22 Августа, 2014 - 09:01:38
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




dima681
Над полем ввода текста есть кнопки, среди них кнопка PHP.
"Невидимый", думаю, в данном случае пишется слитно.

Цитата:
Когда получатель открывает письмо

JavaScript


-----
Март 2021. Бросил программирование
 
 Top
dima681
Отправлено: 24 Августа, 2014 - 12:09:51
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




ну неужели не кто не может памоч
 
 Top
dcc0
Отправлено: 24 Августа, 2014 - 12:22:21
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Как я понял: задача отправить адресанту уведомление, что адресат открыл и читает письмо.
Когда получатель открывает письмо, видит html текст.
Предположу, что можно решить так: встроить в письмо javascript, который отправит уведомление адресанту (посредством обращения к скрипту php на сервере), что письмо в настоящий момент читается. Хорошо


-----
Март 2021. Бросил программирование
 
 Top
dima681
Отправлено: 25 Августа, 2014 - 07:14:45
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




dcc0 пишет:
Как я понял: задача отправить адресанту уведомление, что адресат открыл и читает письмо.
Когда получатель открывает письмо, видит html текст.
Предположу, что можно решить так: встроить в письмо javascript, который отправит уведомление адресанту (посредством обращения к скрипту php на сервере), что письмо в настоящий момент читается. Хорошо

вы абсолютно правы так оно и есть прикрепляю тестовое письмо в которое встроен javascript но скрипт на сервере не работает, выдаёт ошибку команды MakeCopy и что это за ошибка я никак не могу понять чтоб её исправить тестировал на виртуальном сервере через http://localhost:8080/ всё прекрасно работает как выгружаю на сайт не пашет
Скачать файл: Тест.eml
Скачан раз: 44

(Отредактировано автором: 25 Августа, 2014 - 09:06:30)

 
 Top
Мелкий Супермодератор
Отправлено: 25 Августа, 2014 - 10:02:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




dcc0 пишет:
Предположу, что можно решить так: встроить в письмо javascript

Нельзя. Чуть менее чем все почтовые сервисы вырезают js из писем.

dima681 пишет:
в конец письма вставляю ссылку на невидимую картинку, которая должна скачиваться с сервера

Варианты:
0) картинка загружена не будет, т.к. действует запрет на загрузку внешних ресурсов
1) загрузка картинки не будет иметь никакого отношения к пользователю, т.к. загружена почтовым сервисом и показана из его кеша.
2) всё-таки случилось чудо и картинка загружена будет, именно с вашего сервера и именно в момент открытия письма


-----
PostgreSQL DBA
 
 Top
dima681
Отправлено: 25 Августа, 2014 - 10:16:41
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




Мелкий здравствуйте уважаемый гуру в предыдущем моём посте я прикрепил тестовое письмо пересланное с 1 почтового ящика на другой почтовые сервера в нём нечего не вырезали вы можете убедится в этом если откроите письмо в блокноте, в почтовой программе появляется сообщение внешняя картинка не загружена нажмите на........ и она загрузится принажатее на эту строку письмо обращается к скрипту, а скрипт просто молчит и не какой лог не создает
 
 Top
dcc0
Отправлено: 25 Августа, 2014 - 10:23:46
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Цитата:
Нельзя. Чуть менее чем все почтовые сервисы вырезают js из писем.

Но в теории все-таки можно? : )

Флеш тоже вырезает?
Я когда-то делал редирект с помощью флеш?
Хотя у адресата может не быть проигрывателя флеш на компьютере.


Что в итоге?
Только явно сделать в письме кнопку?


-----
Март 2021. Бросил программирование
 
 Top
Мелкий Супермодератор
Отправлено: 25 Августа, 2014 - 10:27:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




dima681 пишет:
в почтовой программе появляется сообщение внешняя картинка не загружена нажмите на

Мелкий пишет:
картинка загружена не будет, т.к. действует запрет на загрузку внешних ресурсов

И где вы видите противоречие?

dima681 пишет:
в нём нечего не вырезали

Потому что это исходное сообщение. Его и должны выдавать так, как оно есть.
Например, gmail об этом официально: https://support[dot]google[dot]com/mail/[dot][dot][dot]wer/145919?hl=ru

dima681 пишет:
а скрипт просто молчит и не какой лог не создает

Проверяйте для начала access.log, был ли запрос. error.log, что случилось. Потом дебажьте.
Я указал на то, что эта статистика будет сильно расходиться с реальностью.


-----
PostgreSQL DBA
 
 Top
dima681
Отправлено: 25 Августа, 2014 - 10:30:54
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




где можно найти этот лог
 
 Top
dcc0
Отправлено: 25 Августа, 2014 - 10:32:42
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




В любом случае, стоит оценить этическую и юридическую стороны этой задачи.
Я бы закрыл тему.

(Отредактировано автором: 25 Августа, 2014 - 10:33:22)



-----
Март 2021. Бросил программирование
 
 Top
dima681
Отправлено: 25 Августа, 2014 - 10:40:34
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




с юридической точки зрения нечего не законного здесь нет во многих письмах есть внешние картинки с этической точки зрения конечно не хорошо следить прочли письмо или нет но что поделать если некоторые люди получая письмо потом через месяч бьют себя пяткой в грудь и кричат мы нечего не получали
 
 Top
Мелкий Супермодератор
Отправлено: 25 Августа, 2014 - 10:49:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




dcc0 пишет:
Флеш тоже вырезает?

А почтовые программы флеш играют? Таких тоже очень много.

dcc0 пишет:
Что в итоге?

Ничего. Почтовики активно препятствуют сбору статистики о пользователях.
Брать статистику, которую предоставляют сами почтовики:
https://postmaster[dot]mail[dot]ru/
https://postoffice[dot]yandex[dot]ru/
У gmail'а аналога не находил. Буду признателен, если кто подскажет что-нибудь похожее.

dcc0 пишет:
В любом случае, стоит оценить этическую и юридическую стороны этой задачи.

Этику судить отказываюсь, а юридически чисто. Иначе можно договориться о запрете логов веб-серверов.

dima681 пишет:
где можно найти этот лог

Зависит от того, где и как вы расположены.
Если конфиги не меняли, то /var/log/{apache2,nginx}, в зависимости от используемого веб-сервера.


-----
PostgreSQL DBA
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB