在ajax调用

时间:2017-05-09 18:34:29

标签: php jquery ajax

我在文件中有一个名为'test.php'的文件,我有以下代码

 <!DOCTYPE html>
    <html>
    <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script>
    $(document).ready(function(){
        $("#btn").click(function(){
            jQuery.ajax({
                url : 'http://example.com/TEST/images.php',
                type : 'POST',
                data : {
                     name : 'black-ring1.gif'
                },
                success : function(data, status) {
                    if(data){
                       alert(data);
                    }
                }


            });
        });
    });
    </script>
    </head>
    <body>

    <p id="btn">Button</p>
    </body>
    </html>

我的'images.php'文件,当ajax调用时会执行以下代码。

<?php
$image_name = $_POST['name'];
$src = "http://example.com/images/icons/" . $image_name;

if(file_exists($src)){
    echo "Exists";
}else{
    echo "Does not exist";
}

在'images.php'中,file_exists($ url)给了我总是错误的答案(不存在)..我确定$ url确实在给定的URL中退出..但为什么它不起作用。我怎么能让它发挥作用......请帮助我......谢谢..

3 个答案:

答案 0 :(得分:0)

file_exists无法与http://网址一起使用。来自documentation

  

从PHP 5.0.0开始,此函数也可以与某些URL包装器一起使用。请参阅Supported Protocols and Wrappers以确定哪些包装器支持stat()系列功能。

如果您按照该链接进行操作,然后按照http://链接进行操作,则说明:

  

支持stat()否

相反,您只需尝试打开网址即可。如果成功则存在URL。

<?php
$image_name = $_POST['name'];
$src = "http://example.com/images/icons/" . $image_name;

if($fh = fopen($src)){
    echo "Exists";
    close($fh);
}else{
    echo "Does not exist";
}

答案 1 :(得分:0)

首先,您需要验证是否传递了名称

(!empty($_POST["name"])) {
  $image_name = $_POST['name'];
  $src = "http://example.com/images/icons/" . $image_name;
}else{  
    echo "no, name";
}

然后您可以使用CURL检查网址是否存在

if(is_url_exist($src)){
    echo "Exists";
}else{
    echo "Does not exist";
}

此代码来自此SO

function is_url_exist($url){
    $ch = curl_init($url);    
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if($code == 200){
       $status = true;
    }else{
      $status = false;
    }
    curl_close($ch);
   return $status;
}

您也可以尝试使用此SO

if (getimagesize($src) !== false) {
        echo "Exists";
    }else{
        echo "Does not exist";
    }

答案 2 :(得分:0)

file_exists()检查文件。 URL不是文件。如果您要查找的图像文件位于本地服务器上,则可以使用完整路径名称:

if (file_exists('/path/to/images/foo.png')) {
    ...
}

如果文件位于远程服务器上,并且您要测试引用它的URL是否有效,则可以使用CURL对其执行HEAD请求:

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD');
$result = curl_exec($curl);
$info = curl_getinfo($curl);
curl_close($curl);
if ($info['http_code'] == 200) {
    echo "image exists\n";
}

除非你真的需要图像内容,否则我不建议做像file_get_contents($url)这样的事情,因为这实际上会下载完整的图像然后把它扔掉,浪费你和远程服务器的带宽。