【问题标题】:cURL not working with GET var and fopen - PHPcURL 不适用于 GET var 和 fopen - PHP
【发布时间】:2016-10-25 20:54:05
【问题描述】:

我在浏览器中打开test1.php,它应该调用test2.php,并在url 中使用GET 变量id,这又应该将id 和时间附加到一个名为test1.txt 的本地文本文件中

但它不起作用。

如果我直接使用 GET var 调用 test2.php,它就可以正常工作 - http://www.example.com/test2.php?id=123456 - 但是当我在浏览器中加载 test1.php 时它就不起作用了。

test1.php

curl_setopt_array(
$ch, array(
CURLOPT_URL => 'http://www.example.com/test2.php?id=123456',
CURLOPT_RETURNTRANSFER => 0
));

curl_exec($ch);

test2.php

if(!isset($_GET['id'])) {
  die();
}

$ID = (int)$_GET['id'];

$myfile = fopen("test1.txt", "a") or die();
$txt = $ID . " - " .time() . "\n";
fwrite($myfile, $txt);
fclose($myfile);

php 中是否有安全措施来防止这种行为,或者我只是在这里遗漏了一些非常明显的东西?

【问题讨论】:

  • 查看服务器访问日志时看到id=123456参数了吗?
  • 你带来了我生命中的祸根,以及导致我首先走这条路的原因。我的服务器访问日志由 Plesk 管理,访问是一场噩梦(通过 Plesk 控制面板除外)。因此,我不必使用 php 来获取信息的访问日志,因此这个 cURL 设置将 id 和时间写入我自己的文本(日志)文件。简而言之 - 我不知道 apache 日志是谋杀导航。
  • 我想不出这不起作用的任何原因。脚本一直使用带有 URL 参数的curl
  • 我刚刚在我的服务器上试了一下,效果很好。
  • 您从未设置过$ch。你需要$ch = curl_init();

标签: php curl get


【解决方案1】:

你需要初始化$ch:

$ch = curl_init();
url_setopt_array(
    $ch, array(
        CURLOPT_URL => 'http://www.example.com/test2.php?id=123456',
        CURLOPT_RETURNTRANSFER => 0
));

curl_exec($ch);

【讨论】:

    【解决方案2】:

    如果我没记错的话,你应该调用 test2.php,但在代码中我看到你调用的是同一个文件。

        curl_setopt_array(
        $ch, array(
        CURLOPT_URL => 'http://www.example.com/test2.php?id=123456',
        CURLOPT_RETURNTRANSFER => 0
        ));
    

    应该可以。

    【讨论】:

    • 对不起,我改了,实际代码是正确的,只是在我的环境中我有相反的文件,test1是test 2,test2是test1,我想如果我切换它们会更清楚对于这个问题,但忘记更改 curl url ref。您现在在问题中看到的内容是正确的,但仍然无法正常工作。
    • test1 和 test2 是否在同一个域中?
    • 是的,一切都在同一个域,同一个目录(webroot)中。
    • @Nandan 为什么这很重要? PHP没有跨域限制,只有浏览器的AJAX。
    • 不,我只是在想,如果两者在同一个域中,他可以改变他的方法。他不必提出 curl 请求。我就是这么想的。
    猜你喜欢
    • 1970-01-01
    • 2021-08-04
    • 2016-04-15
    • 1970-01-01
    • 2016-10-19
    • 2014-01-22
    • 2017-07-27
    • 2020-06-13
    • 1970-01-01
    相关资源
    最近更新 更多