有没有一种 JavaScript 方法可以执行 file_get_contents() 函数?

19

这里是PHP文档

如果我找不到纯客户端的方法,这里是我如何在Ajax调用中使用它。

$homepage = file_get_contents('http://www.example.com/');
echo $homepage;

有没有办法在客户端完成这个操作而不必将字符串通过ajax发送到服务器端?


你想要“包含”的文件内容是什么? - MonkeyMonkey
类似上面的示例,它接受一个URL作为参数,该URL由用户定义。 - CS_2013
9个回答

10

现在已经是2020年,一些现代方法越来越流行;

async function file_get_contents(uri, callback) {
    let res = await fetch(uri),
        ret = await res.text(); 
    return callback ? callback(ret) : ret; // a Promise() actually.
}

file_get_contents("https://httpbin.org/get", console.log);
// or
file_get_contents("https://httpbin.org/get").then(ret => console.log(ret));

1
这非常准确,而且运行得很好,感谢您提供的es6示例。 - Panomosh
1
如何将值存入变量以供使用? - Crimin4L

9
你可以做到:
JS 代码:
$.post('phppage.php', { url: url }, function(data) {
    document.getElementById('somediv').innerHTML = data;        
});

PHP 代码:

$url = $_POST['url'];
echo file_get_contents($url);

那样可以获取到URL的内容。

8

JavaScript无法直接从页面上获取数据。它可以调用本地的PHP脚本代表其自己获取数据,但是JavaScript(在浏览器中)无法直接做到这一点。

$.post("/localScript.php", { srcToGet: 'http://example.com' }, function(data){
  /* From within here, data is whatever your local script sent back to us */
});

你可以使用JSONP和跨域资源共享等选项,但这两个选项都需要在另一端进行设置,因此你不能仅选择一个域并开始发送数据请求。
更多阅读:同源策略

7

这个函数将会返回一个字符串形式的文件,就像PHP中的 file_get_contents() 函数一样。

function file_get_contents(uri, callback) {
    fetch(uri).then(res => res.text()).then(text => callback(text));
}

然而,与 PHP 不同的是,JavaScript 会继续执行下一条语句,而不会等待数据返回。


4
根据您链接的域名/URL与您的用户名相同或包含相同的情况来看,您似乎已经链接到了自己的网站/一个您有关联的网站。如果是这样,请您必须披露这是您的网站。如果您未透露关联关系,则会被视为垃圾信息。请参阅:[何为“良好”的自我推广?](//meta.stackexchange.com/q/182212)以及自我推广帮助中心。披露必须明确,但不需要正式。当涉及您个人的内容时,可以简单地表述“在我的网站上…”,“在我的博客上…”等。 - Makyen

3
不是一般意义上的。跨域限制禁止Javascript代码这样做。 如果目标站点设置了CORS(跨源资源共享),则可以使用XMLHttpRequest加载文件。大多数站点都没有设置,因为出于安全原因,默认情况下关闭,而且很少需要。 如果您只需要包含一个HTML页面,则可以将其放入<iframe>元素中。但是这可能会导致某些布局问题(页面最终以固定大小的元素显示)。

我能分析iframe吗?也许可以通过某种方式获取标题? - CS_2013
@CS_2013 不,如果 iframe 不是来自你的域的文档,则不行。 - Sampson
不行,框架的内容几乎是完全禁止访问的。 - user149341
跨域资源共享设置的方式是出于非常好的安全原因。有关详细信息,请阅读Michal Zalewski的优秀著作《The Tangled Web: A Guide to Securing Modern Web Applications》。 - user149341
@CS_2013:你如何“保持安全性”?我认为你在一个非常基本的问题上误解了问题。 - Niklas B.
显示剩余2条评论

2
你可以使用php.js库,它允许在javascript中使用一些php函数,其中包括file_get_contents()函数。
<script>
var data = file_get_contents('Your URL');
</script>

你可以在 http://phpjs.org/ 找到更多关于 php.js 的信息。

1
这将受到同源策略的限制。 - Lance Caraccioli

0

我觉得这可能对您有用:

一个带有 "file-get-contents" 方法的 npm 软件包,适用于 node.js https://www.npmjs.com/package/file-get-contents

它是异步的,所以如果您正在使用express,则应该像这样使用

app.get('/',  async (req, res)=>{
    //paste here the code below
}

Example

const fileGetContents = require('file-get-contents');
 
// A File request
 
try {
    let data = await fileGetContents('/tmp/foo/bar');
 
    console.log(data);
} catch (err) {
    console.log('Unable to load data from /tmp/foo/bar');
}
 
// Or a HTTP(S) request
 
fileGetContents('https://pokeapi.co/api/v2/pokemon/1/').then(json => {
    const pokemon = JSON.parse(json);
 
    console.log(`Name of first pokemon is ${pokemon.name}`);
}).catch(err => {
    console.err(`Unable to get content from PokeAPI. Reason: ${err.message}`);
});

-1
  <div id="svg">

  </div>
  <script>

    function file_get_contents(uri, callback) {
         fetch(uri).then(res => res.text()).then(text => 
        {

            var xmlSvg =text;
            console.log(xmlSvg );
            document.getElementById('svg').innerHTML = xmlSvg;
        })
    }

    
    var uri ='You-urlllllllll-svg';

    file_get_contents(uri);

</script>

你能对这个回答进行澄清吗?谢谢! - 10 Rep
欢迎来到stackoverflow!请解释您的答案以使其有帮助。https://stackoverflow.com/help/how-to-answer https://stackoverflow.com/tour - ethry

-1

function file_get_contents(filename) {
    fetch(filename).then((resp) => resp.text()).then(function(data) {
        document.getElementById("id").innerHTML = data;
    });
}
file_get_contents("url");
<span id="id"></span>


请解释一下你的代码。 - ethry
欢迎来到stackoverflow!请解释您的答案以使其有帮助。https://stackoverflow.com/help/how-to-answer https://stackoverflow.com/tour - ethry
嗨,请解释一下你的代码,让它对其他人有所帮助。 - ethry
此函数仅获取URL并将其作为PHP文件_get_contents处理。在js函数内部,使用inner HTML方法提取URL并放置数据。 - MD.Moon Kabir
请编辑答案并将其放入,以使您的答案在搜索结果中更有帮助。 - ethry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接