【问题标题】:Passing Argument via Command Line php通过命令行 php 传递参数
【发布时间】:2012-08-13 19:40:37
【问题描述】:

所以我有这个脚本,我试图通过命令行传递参数。 但是,不能让它工作。这是脚本的代码:

#!/usr/bin/php 

<?php
$argv[1] = $scraper;
require_once('Scraper.php');
$scraper = new JonH_Scraper();

if (empty($argv[1])) {
    echo 'whats the URL?';
    }

$scraper->scrape($url);
var_dump($scraper);

【问题讨论】:

  • 它不起作用是什么意思?是否有错误,或者它只是打印出'Whats the URL'?
  • 如果您的命令行参数不存在,您应该使用exitdie。使用您在此处输入的代码,即使参数为空,$scraper-&gt;scrape() 也会被调用。
  • 您会遇到什么错误,并检查您的包含路径。添加var_dump($argv); 并在你的hashbang 上设置-n 标志,或者......有太多事情可能导致有趣的事情发生......需要更多信息

标签: php command-line scraper


【解决方案1】:

错误就在这里

$argv[1] = $scraper;

应该是

$scraper = $argv[1];

问候

【讨论】:

    【解决方案2】:

    我认为问题出在这一行:

    $argv[1] = $scraper;
    

    您将$scraper 分配给$argv[1],但$scraper 未定义,因此分配变为空。稍后您检查$argv[1] 是否为空,因为它是NULL

    也许应该反过来?

    $scraper = (isset($argv[1])) ? $argv[1] : null;
    
    if (empty($scraper)) die('No url provided');
    

    编辑:您可能希望使用不同的变量名称,因为您继续创建一个新的Scraper 对象并将其分配给同一个变量。

    【讨论】:

      【解决方案3】:

      应该是这样的:

      php script.php <URL>
      
      
      #!/usr/bin/php 
      <?php
      require_once('Scraper.php'); 
      $url = $argv[1];
      if(empty($url)){
       die('URL is EMPTY');
      }
      $scraper = new Scraper();
      $results = $scraper->scrape($url);
      var_dump($results);
      

      【讨论】:

      • 仅供参考,$argv[0] 是 php 脚本本身的名称,argv[1] 是命令行中传递的第一个参数。
      • 感谢@drew010
      • 我仍然没有得到任何结果
      • #!/usr/bin/php &lt;?php $scraper = $argv[1]; require_once('Scraper.php'); $scraper = new JonH_Scraper(); $scraper = (isset($argv[1])); if (empty($argv[1])) { die('No url provided'); } $scraper-&gt;scrape($url); var_dump($scraper);
      • 为什么要从传入的参数中分配 $scaper 变量?您不应该从参数中分配 $url 变量。让我扩展一下上面的代码以填补空白。
      猜你喜欢
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2021-11-29
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多