手机视频广告,用PHP发送视频广告,需要通过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. echo ‘单独dddd’;
  6. ob_end_clean();
  7. passthru(‘python E:/webroot/test/dtree.py’, $return_var);
  8. $output = ob_get_contents();
  9. ob_end_clean();
  10. echo $output;
  11. //数据保存
  12. file_put_contents(‘output.txt’, $output);
  13. file_put_contents(‘return.txt’, $return_var);
  14. die();
  15. ?>

       使用如上的方法,当发送若干视频广告时候,需要使用exec调用若干次发送程序,或者让发送程序一次接收若干手机号码,有发送程序循环处理.
       较好的办法是打开一个指向进程的管道,然后每次发送一个广告,如下:

文件名称:../popen.php
  1. <?php
  2. ignore_user_abort();    // run script in background
  3. set_time_limit(0);        // run script forever
  4. //popen是单向的,如果需要双向支持,使用 proc_open()。
  5. $handle = popen(‘python E:/webroot/test/dtree.py’, ‘r’);
  6. while(!feof($handle))
  7. {
  8.     $buffer .= fread($handle, 1024);
  9. }
  10. pclose($handle);
  11. echo $buffer;
  12. //数据保存
  13. file_put_contents(‘output.txt’, $buffer);
  14. die();
  15. //写入的例子
  16. //$handle = popen (“python”,”w”);
  17. //fwrite($handle, ‘3 + 6’);
  18. //pclose($handle);
  19. ?>

       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. $descriptorspec = array(
  5.                            0 => array(‘pipe’, ‘r’),
  6.                            1 => array(‘pipe’, ‘w’),
  7.                            2 => array(‘file’, ‘c:/temp/error-output4.txt’, ‘w’)
  8.                              );
  9. $cwd = ‘D:/Python24/’;
  10. $env = array(‘some_option’ => ‘aeiou’);
  11. $process = proc_open(‘python.exe’, $descriptorspec, $pipes, $cwd, $env);
  12. if (is_resource($process))
  13. {
  14.     // $pipes now looks like this:
  15.          // 0 => writeable handle connected to child stdin
  16.          // 1 => readable handle connected to child stdout
  17.          // Any error output will be appended to /tmp/error-output.txt
  18.          //echo stream_get_contents($pipes[1]);
  19.     fwrite($pipes[0], “print 61+10\n”);
  20.     fwrite($pipes[0], “print 31+10\n”);
  21.     fwrite($pipes[0], “print 41+10\n”);
  22.     fwrite($pipes[0], “print 61+10\n”);
  23.     fclose($pipes[0]);
  24.     //echo stream_get_contents($pipes[1]);
  25.     $buffer = ;
  26.          while(!feof($pipes[1]))
  27.          {
  28.         $buffer .= fgets($pipes[1], 1024);
  29.          }
  30.     fclose($pipes[1]);
  31.          echo $buffer;
  32.     //数据保存
  33.     file_put_contents(‘output.txt’, $buffer);
  34.     //返回值为1,则发生语法错误!
  35.     $return_value = proc_close($process);
  36.     
  37.          echo “command returned $return_value\n”;
  38. }
  39. ?>

发表评论

邮箱地址不会被公开。 必填项已用*标注