手机视频广告,用PHP发送视频广告,需要通过PHP执行一个外部发送视频命令。
可以写PHP扩展来完成,本人没有那个能力及时间,故使用exec()这个函数来完成。
passthru(),exec(),system() 这三个函数功能相似.passthru无法接受输出值,system只接收最后以行输出,exec可以完全接收输出.
见如下passthru的一个例子:
文件名称:../passthru.php
使用如上的方法,当发送若干视频广告时候,需要使用exec调用若干次发送程序,或者让发送程序一次接收若干手机号码,有发送程序循环处理.
较好的办法是打开一个指向进程的管道,然后每次发送一个广告,如下:
文件名称:../popen.php
popen() 它是单向的(只能用于读或写),我们需要获得发送结果,proc_open()来完成双向支持功能:
文件名称:../proc_open.php
可以写PHP扩展来完成,本人没有那个能力及时间,故使用exec()这个函数来完成。
passthru(),exec(),system() 这三个函数功能相似.passthru无法接受输出值,system只接收最后以行输出,exec可以完全接收输出.
见如下passthru的一个例子:
文件名称:../passthru.php
1. <?php
2. ob_start();
3. ignore_user_abort(); // run script in background
4. set_time_limit(0); // run script forever
5.
6. echo '单独dddd';
7. ob_end_clean();
8.
9. passthru('python E:/webroot/test/dtree.py', $return_var);
10. $output = ob_get_contents();
11. ob_end_clean();
12.
13. echo $output;
14.
15. //数据保存
16. file_put_contents('output.txt', $output);
17. file_put_contents('return.txt', $return_var);
18.
19. die();
20. ?>
2. ob_start();
3. ignore_user_abort(); // run script in background
4. set_time_limit(0); // run script forever
5.
6. echo '单独dddd';
7. ob_end_clean();
8.
9. passthru('python E:/webroot/test/dtree.py', $return_var);
10. $output = ob_get_contents();
11. ob_end_clean();
12.
13. echo $output;
14.
15. //数据保存
16. file_put_contents('output.txt', $output);
17. file_put_contents('return.txt', $return_var);
18.
19. die();
20. ?>
使用如上的方法,当发送若干视频广告时候,需要使用exec调用若干次发送程序,或者让发送程序一次接收若干手机号码,有发送程序循环处理.
较好的办法是打开一个指向进程的管道,然后每次发送一个广告,如下:
文件名称:../popen.php
1. <?php
2. ignore_user_abort(); // run script in background
3. set_time_limit(0); // run script forever
4.
5. //popen是单向的,如果需要双向支持,使用 proc_open()。
6. $handle = popen('python E:/webroot/test/dtree.py', 'r');
7.
8. while(!feof($handle))
9. {
10. $buffer .= fread($handle, 1024);
11. }
12.
13. pclose($handle);
14.
15. echo $buffer;
16.
17. //数据保存
18. file_put_contents('output.txt', $buffer);
19. die();
20.
21. //写入的例子
22. //$handle = popen ("python","w");
23. //fwrite($handle, '3 + 6');
24. //pclose($handle);
25. ?>
2. ignore_user_abort(); // run script in background
3. set_time_limit(0); // run script forever
4.
5. //popen是单向的,如果需要双向支持,使用 proc_open()。
6. $handle = popen('python E:/webroot/test/dtree.py', 'r');
7.
8. while(!feof($handle))
9. {
10. $buffer .= fread($handle, 1024);
11. }
12.
13. pclose($handle);
14.
15. echo $buffer;
16.
17. //数据保存
18. file_put_contents('output.txt', $buffer);
19. die();
20.
21. //写入的例子
22. //$handle = popen ("python","w");
23. //fwrite($handle, '3 + 6');
24. //pclose($handle);
25. ?>
popen() 它是单向的(只能用于读或写),我们需要获得发送结果,proc_open()来完成双向支持功能:
文件名称:../proc_open.php
1. <?php
2. ignore_user_abort(); // run script in background
3. set_time_limit(0); // run script forever
4.
5. $descriptorspec = array(
6. 0 => array('pipe', 'r'),
7. 1 => array('pipe', 'w'),
8. 2 => array('file', 'c:/temp/error-output4.txt', 'w')
9. );
10.
11. $cwd = 'D:/Python24/';
12. $env = array('some_option' => 'aeiou');
13.
14. $process = proc_open('python.exe', $descriptorspec, $pipes, $cwd, $env);
15.
16. if (is_resource($process))
17. {
18. // $pipes now looks like this:
19. // 0 => writeable handle connected to child stdin
20. // 1 => readable handle connected to child stdout
21. // Any error output will be appended to /tmp/error-output.txt
22. //echo stream_get_contents($pipes[1]);
23.
24. fwrite($pipes[0], "print 61+10\n");
25. fwrite($pipes[0], "print 31+10\n");
26. fwrite($pipes[0], "print 41+10\n");
27. fwrite($pipes[0], "print 61+10\n");
28. fclose($pipes[0]);
29.
30. //echo stream_get_contents($pipes[1]);
31. $buffer = '';
32. while(!feof($pipes[1]))
33. {
34. $buffer .= fgets($pipes[1], 1024);
35. }
36.
37. fclose($pipes[1]);
38. echo $buffer;
39.
40. //数据保存
41. file_put_contents('output.txt', $buffer);
42.
43. //返回值为1,则发生语法错误!
44. $return_value = proc_close($process);
45.
46.
47. echo "command returned $return_value\n";
48. }
49. ?>
2. ignore_user_abort(); // run script in background
3. set_time_limit(0); // run script forever
4.
5. $descriptorspec = array(
6. 0 => array('pipe', 'r'),
7. 1 => array('pipe', 'w'),
8. 2 => array('file', 'c:/temp/error-output4.txt', 'w')
9. );
10.
11. $cwd = 'D:/Python24/';
12. $env = array('some_option' => 'aeiou');
13.
14. $process = proc_open('python.exe', $descriptorspec, $pipes, $cwd, $env);
15.
16. if (is_resource($process))
17. {
18. // $pipes now looks like this:
19. // 0 => writeable handle connected to child stdin
20. // 1 => readable handle connected to child stdout
21. // Any error output will be appended to /tmp/error-output.txt
22. //echo stream_get_contents($pipes[1]);
23.
24. fwrite($pipes[0], "print 61+10\n");
25. fwrite($pipes[0], "print 31+10\n");
26. fwrite($pipes[0], "print 41+10\n");
27. fwrite($pipes[0], "print 61+10\n");
28. fclose($pipes[0]);
29.
30. //echo stream_get_contents($pipes[1]);
31. $buffer = '';
32. while(!feof($pipes[1]))
33. {
34. $buffer .= fgets($pipes[1], 1024);
35. }
36.
37. fclose($pipes[1]);
38. echo $buffer;
39.
40. //数据保存
41. file_put_contents('output.txt', $buffer);
42.
43. //返回值为1,则发生语法错误!
44. $return_value = proc_close($process);
45.
46.
47. echo "command returned $return_value\n";
48. }
49. ?>
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/1418/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
评论列表