1

目前我有这个小脚本,可以检查域名是否免费。它可以在浏览器中运行,当您键入 check.php?domain=xxxx.com 并查看它是否免费时。

由于使用了 $_GET,它只能在浏览器中使用,而不能在命令行中使用。

PHP 手册说我应该使用 $argv 或 getopt() 来实现这一点。我已经尝试过了,但是我的脚本停止工作。

如何使以下代码从命令行工作?

<?php
include_once('/home/xxx/API.php');  
$CClient = new XCApi();
$CClient->isAvailable();
$d = $_GET['domain'];
ob_implicit_flush(1);

for ($i = 0; $i < 60000; ++$i) {

$domainResult = $CClient->checkDomainAvailability( new XDomain( $d ) );

if ( $domainResult->getStatus() == "domain_available" ) {
    echo $i . ". Domain " . $d . " is free (checked: " . date("Y-m-d H:i:s") . ")<br />";

    $_GET['domain'] = $d;
    include_once('Register.php');
    exit;

} 
elseif ( $domainResult->getStatus() == "domain_unavailable" ) {
    echo $i . ". Domain " . $d . " is unavailable (checked: " . date("Y-m-d H:i:s") . ")<br />";
}
else {
    echo $i . ". Domain " . $d . " is unknown (checked: " . date("Y-m-d H:i:s") . ")<br />";
}
echo"<pre>";
print_r($domainResult);
echo"</pre>";
}
?>
4

4 回答 4

3

编写另一个脚本来读取命令 args 并将它们放入 $_GET 数组中,然后包含此文件。

#!/...
<?php
$_GET = array(
'domain' => $argv[1]
);

include 'yourscript.php';

或者只是将那一点放在文件(副本)的顶部

于 2012-05-06T17:06:07.063 回答
3

改变

$d = $_GET['domain'];

到:

$d = $argv[1];

...并在命令行中调用它,如下所示:

php /path/to/script.php "www.domaintocheck.com"
于 2012-05-06T17:07:03.997 回答
0

代替...

$d = $_GET['domain'];

和...

$d = $argv[1];

对于命令行版本。

http://php.net/manual/en/reserved.variables.argv.php

于 2012-05-06T17:06:10.173 回答
0

这是一个副本:PHP在linux命令提示符中传递$_GET

Linux 中另一种可能的方法是使用 curl(将 localhost 更改为服务器的域名):

curl http://localhost/check.php?domain=xxxx.com

最后,简单愚蠢的方法是检查是否设置了 $_GET['domain'] 或 $argv[1] 或 getopt('domain:') 。

这样,您的脚本既可以从 http 请求也可以从命令行运行。

于 2012-05-06T17:18:55.930 回答