PHP发送AT指令,phpat指令
需求: 发送短信到用户输入手机, 要求可以自定义信息内容
问题: 没有电信猫, 使用免费api接口无法自定义短信内容
解决方案: 通过4G网卡, 接在服务器上, 通过AT指令操作网卡, 发送短信
查阅发现, AT质量发送需要对信息进行多重编码, 而且发送超时, 但实际发送成功, 问题还未完全解决
代码如下:
<span> 1</span> <?<span>php </span><span> 2</span> send_message('8613800138000', '您好, 你正在申请注册服务平台, 您的验证码是: 97431'<span>); </span><span> 3</span> <span> 4</span> <span>function</span> send_message(<span>$phone</span>, <span>$message</span><span>) { </span><span> 5</span> <span>$phone</span> = decode_phone(<span>$phone</span><span>); </span><span> 6</span> <span> 7</span> <span>$message_center</span> = decode_message_center('+8613010200500'); <span>//</span><span>此步骤似乎没用</span> <span> 8</span> <span> 9</span> <span>$message</span> = decode_message(<span>$message</span><span>); </span><span> 10</span> <span> 11</span> <span>$length</span> = get_message_length(<span>$phone</span>, <span>$message</span><span>); </span><span> 12</span> <span> 13</span> <span>set_time_limit</span>(0<span>); </span><span> 14</span> <span> 15</span> <span>//</span><span>根据情况选择COM口, 此处为COM4, 在管理设备中, 查看网络解调器的COM口</span> <span> 16</span> <span> 17</span> <span>exec</span>('mode COM4: baud=115200 data=8 stop=1 parity=n xon=on'<span>); </span><span> 18</span> <span> 19</span> <span>$fd</span> = dio_open('COM4:',<span> O_RDWR); </span><span> 20</span> <span> 21</span> <span>$ff</span> = dio_stat(<span>$fd</span><span>); </span><span> 22</span> <span> 23</span> <span>if</span> (!<span>$fd</span><span>) { </span><span> 24</span> <span>die</span>("failed open com4"<span>); </span><span> 25</span> <span> } </span><span> 26</span> <span> 27</span> <span>//</span><span>chr(13)是回车, chr(16)是Ctrl+Z</span> <span> 28</span> <span> 29</span> dio_write(<span>$fd</span>, "AT+CMGF=0" . <span>chr</span>(13)); <span>//</span><span>设置发送模式为PDU</span> <span> 30</span> <span> 31</span> dio_write(<span>$fd</span>, "AT+CMGS=" . <span>$length</span> . <span>chr</span>(13)); <span>//</span><span>发送信息长度</span> <span> 32</span> <span> 33</span> dio_write(<span>$fd</span>, '11000D91' . <span>$phone</span> . '000800' . <span>$message</span> . <span>chr</span>(26) . <span>chr</span>(13)); <span>//</span><span>发送短信息</span> <span> 34</span> <span> 35</span> <span>sleep</span>(2<span>); </span><span> 36</span> <span> 37</span> dio_close(<span>$fd</span><span>); </span><span> 38</span> <span>} </span><span> 39</span> <span> 40</span> <span>function</span> decode_phone(<span>$phone</span><span>) { </span><span> 41</span> <span>$phone</span> = <span>str_replace</span>('+', '', <span>$phone</span><span>); </span><span> 42</span> <span> 43</span> <span>if</span> (<span>strlen</span>(<span>$phone</span>) % 2 !== 0<span>) { </span><span> 44</span> <span>$phone</span> = <span>$phone</span> . 'F'<span>; </span><span> 45</span> <span> } </span><span> 46</span> <span> 47</span> <span>$newPhone</span> = ''<span>; </span><span> 48</span> <span>for</span> (<span>$i</span> = 0; <span>$i</span> < <span>strlen</span>(<span>$phone</span>); <span>$i</span> += 2<span>) { </span><span> 49</span> <span>$newPhone</span> = <span>$newPhone</span> . <span>substr</span>(<span>$phone</span>, <span>$i</span> + 1, 1) . <span>substr</span>(<span>$phone</span>, <span>$i</span>, 1<span>); </span><span> 50</span> <span> } </span><span> 51</span> <span> 52</span> <span>return</span> <span>$newPhone</span><span>; </span><span> 53</span> <span>} </span><span> 54</span> <span> 55</span> <span>function</span> decode_message_center(<span>$phone</span><span>) { </span><span> 56</span> <span>$newPhone</span> = '91' . decode_phone(<span>$phone</span><span>); </span><span> 57</span> <span> 58</span> <span>$len</span> = <span>strtoupper</span>(<span>dechex</span>(<span>strlen</span>(<span>$newPhone</span>) / 2<span>)); </span><span> 59</span> <span> 60</span> <span>if</span> (<span>strlen</span>(<span>$len</span>) % 2 !== 0<span>) { </span><span> 61</span> <span>$len</span> = '0' . <span>$len</span><span>; </span><span> 62</span> <span> } </span><span> 63</span> <span> 64</span> <span>$newPhone</span> = <span>$len</span> . <span>$newPhone</span><span>; </span><span> 65</span> <span> 66</span> <span>return</span> <span>$newPhone</span><span>; </span><span> 67</span> <span>} </span><span> 68</span> <span> 69</span> <span>function</span> decode_message(<span>$message</span><span>) { </span><span> 70</span> <span>$newMessage</span> = utf8_unicode(<span>$message</span><span>); </span><span> 71</span> <span> 72</span> <span>$len</span> = <span>strtoupper</span>(<span>dechex</span>(<span>strlen</span>(<span>$newMessage</span>) / 2<span>)); </span><span> 73</span> <span> 74</span> <span>if</span> (<span>strlen</span>(<span>$len</span>) % 2 !== 0<span>) { </span><span> 75</span> <span>$len</span> = '0' . <span>$len</span><span>; </span><span> 76</span> <span> } </span><span> 77</span> <span> 78</span> <span>$newMessage</span> = <span>$len</span> . <span>$newMessage</span><span>; </span><span> 79</span> <span> 80</span> <span>return</span> <span>$newMessage</span><span>; </span><span> 81</span> <span>} </span><span> 82</span> <span> 83</span> <span>function</span> utf8_unicode(<span>$name</span><span>) { </span><span> 84</span> <span>$name</span> = <span>iconv</span>('UTF-8', 'UCS-2', <span>$name</span><span>); </span><span> 85</span> <span>$len</span> = <span>strlen</span>(<span>$name</span><span>); </span><span> 86</span> <span>$str</span> = ''<span>; </span><span> 87</span> <span> 88</span> <span>for</span> (<span>$i</span> = 0; <span>$i</span> < <span>$len</span> - 1; <span>$i</span> = <span>$i</span> + 2<span>) { </span><span> 89</span> <span>$c</span> = <span>$name</span>[<span>$i</span><span>]; </span><span> 90</span> <span>$c2</span> = <span>$name</span>[<span>$i</span> + 1<span>]; </span><span> 91</span> <span>if</span> (<span>ord</span>(<span>$c</span>) > 0) { <span>//</span><span>两个字节的文字 </span> <span> 92</span> <span>$str</span> .= <span>base_convert</span>(<span>ord</span>(<span>$c</span>), 10, 16) . <span>str_pad</span>(<span>base_convert</span>(<span>ord</span>(<span>$c2</span>), 10, 16), 2, 0,<span> STR_PAD_LEFT); </span><span> 93</span> } <span>else</span><span> { </span><span> 94</span> <span>$str</span> .= <span>str_pad</span>(<span>base_convert</span>(<span>ord</span>(<span>$c2</span>), 10, 16), 4, 0,<span> STR_PAD_LEFT); </span><span> 95</span> <span> } </span><span> 96</span> <span> } </span><span> 97</span> <span> 98</span> <span>$str</span> = <span>strtoupper</span>(<span>$str</span>); <span>//</span><span>转换为大写 </span> <span> 99</span> <span>return</span> <span>$str</span><span>; </span><span>100</span> <span>} </span><span>101</span> <span>102</span> <span>function</span> get_message_length(<span>$phone</span>, <span>$message</span><span>) { </span><span>103</span> <span>$str</span> = '11000D91' . <span>$phone</span> . '000800' . <span>$message</span><span>; </span><span>104</span> <span>105</span> <span>$length</span> = <span>strlen</span>(<span>$str</span>) / 2<span>; </span><span>106</span> <span>107</span> <span>if</span> (<span>$length</span> < 10<span>) { </span><span>108</span> <span>$length</span> = '0' . <span>$length</span><span>; </span><span>109</span> <span> } </span><span>110</span> <span>111</span> <span>return</span> <span>$length</span><span>; </span><span>112</span> }

tomodifyDataNaphPsession,startTheSessionWithSession_start(),然后使用$ _sessionToset,修改,orremovevariables.1)startThesession.2)setthesession.2)使用$ _session.3)setormodifysessessvariables.3)emovervariableswithunset()

在PHP会话中可以存储数组。1.启动会话,使用session_start()。2.创建数组并存储在$_SESSION中。3.通过$_SESSION检索数组。4.优化会话数据以提升性能。

PHP会话垃圾回收通过概率机制触发,清理过期会话数据。1)配置文件中设置触发概率和会话生命周期;2)可使用cron任务优化高负载应用;3)需平衡垃圾回收频率与性能,避免数据丢失。

PHP中追踪用户会话活动通过会话管理实现。1)使用session_start()启动会话。2)通过$_SESSION数组存储和访问数据。3)调用session_destroy()结束会话。会话追踪用于用户行为分析、安全监控和性能优化。

利用数据库存储PHP会话数据可以提高性能和可扩展性。1)配置MySQL存储会话数据:在php.ini或PHP代码中设置会话处理器。2)实现自定义会话处理器:定义open、close、read、write等函数与数据库交互。3)优化和最佳实践:使用索引、缓存、数据压缩和分布式存储来提升性能。

phpsessionstrackuserdataacrossmultiplepagerequestsusingauniqueIdStoredInacookie.here'showtomanageThemeffectionaly:1)startAsessionWithSessionwwithSession_start()和stordoredAtain $ _session.2)

在PHP中,遍历会话数据可以通过以下步骤实现:1.使用session_start()启动会话。2.通过foreach循环遍历$_SESSION数组中的所有键值对。3.处理复杂数据结构时,使用is_array()或is_object()函数,并用print_r()输出详细信息。4.优化遍历时,可采用分页处理,避免一次性处理大量数据。这将帮助你在实际项目中更有效地管理和使用PHP会话数据。

会话通过服务器端的状态管理机制实现用户认证。1)会话创建并生成唯一ID,2)ID通过cookies传递,3)服务器存储并通过ID访问会话数据,4)实现用户认证和状态管理,提升应用安全性和用户体验。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver CS6
视觉化网页开发工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

Dreamweaver Mac版
视觉化网页开发工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!