使用https:// urls调用file_get_contents()会出现以下错误:
warning: file_get_contents(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP?
Run Code Online (Sandbox Code Playgroud)
我已经阅读了10多个SO问题,所有人都说要启用 extension=php_openssl.dll
我这样做了,我还有问题......
还有什么呢?
更新资料
我解决了问题并发布了答案。但是,我的解决方案并非100%理想。我宁愿只symlink从cachewith clearstatcache(true, $target)或中删除,clearstatcache(true, $link)但那不起作用。
我还宁愿首先避免对符号链接进行缓存,也可以在生成符号链接后立即将其从缓存中删除。不幸的是,我没有运气。由于某些原因clearstatcache(true),创建符号链接后无法正常工作,但仍会对其进行缓存。
我会很高兴地将悬赏奖励给任何能够改善我的答案并解决这些问题的人。
编辑
我试图通过每次clearstatcache运行时生成一个文件来优化我的代码,因此我只需要为每个符号链接清除一次缓存。由于某些原因,这不起作用。clearstatcache每次symlink在路径中包含a时都需要调用它,但是为什么呢?必须有一种方法可以优化我拥有的解决方案。
我使用PHP 7.3.5带nginx/1.16.0。有时file_get_contents在使用时会返回错误的值symlink。问题是删除并重新创建符号链接后,其旧值保留在缓存中。有时返回正确的值,有时返回旧值。它似乎是随机的。
我试图用以下方法清除缓存或防止缓存:
function symlink1($target, $link)
{
realpath_cache_size(0);
symlink($target, $link);
//clearstatcache(true);
}
Run Code Online (Sandbox Code Playgroud)
我并不是真的想要禁用缓存,但是我仍然需要100%的file_get_contents精度。
编辑
我无法发布我的源代码,因为它太长且太复杂了,所以我创建了一个最小的,可重现的示例(index.php),该示例再次出现了问题:
<h1>Symlink Problem</h1>
<?php
$dir = getcwd();
if (isset($_POST['clear-all']))
{
$nos = array_values(array_diff(scandir($dir.'/nos'), array('..', '.')));
foreach ($nos as $no)
{
unlink($dir.'/nos/'.$no.'/id.txt');
rmdir($dir.'/nos/'.$no);
}
foreach (array_values(array_diff(scandir($dir.'/ids'), array('..', '.'))) as $id)
unlink($dir.'/ids/'.$id);
}
if …Run Code Online (Sandbox Code Playgroud) 我想制作一个可以从网站捕获页面的PHP脚本.想想file_get_contents($ url).
但是,本网站要求您在访问任何页面之前填写用户名/密码登录表单.我想,一旦登录,网站会向您的浏览器发送一个身份验证cookie,并且随后的每个浏览器请求都会将会话信息传递回网站以验证访问权限.
我想知道我如何使用PHP脚本模拟浏览器的这种行为,以获得访问权限并从该网站捕获页面.
更具体地说,我的问题是:
谢谢.
我正在使用PHP与Amazon Payments Web服务.我的一些要求有问题.亚马逊正在返回一个错误,但它的方式是给我带来问题.
Amazon返回XML数据并显示有关错误的消息,但它也会抛出HTTP 400(有时甚至是404).这使得file_get_contents()立即抛出错误,我无法获取内容.我也尝试过使用cURL,但从来没有让它给我回复.
无论HTTP状态代码如何,我真的需要一种方法来返回XML.它有一个重要的"消息"元素,可以为我提供有关我的结算请求失败的原因的线索.
有没有人有cURL示例或其他允许我这样做?我的所有请求目前都使用file_get_contents(),但我不反对更改它们.其他人似乎认为cURL是"正确"的方式.
我需要file_get_contents具有容错能力,如果$url它被送到它后面会返回404,在它发出警告之前告诉我它.可以这样做吗?
所以我有第一页:
<div id="div1">This is text one</div>
<div id="div2">This is text two</div>
<div id="div3">This is text three</div>
Run Code Online (Sandbox Code Playgroud)
现在我想得到div的元素,它会返回This is text one,我该怎么做?
我希望能够通过一些变量发送到文件file_get_contents().
这是firstfile.php:
<?php
$myvar = 'This is a variable';
// need to send $myvar into secondfile.php
$mystr = file_get_contents('secondfile.php');
?>
Run Code Online (Sandbox Code Playgroud)
这是secondfile.php:
The value of myvar is: <?php echo $myvar; ?>
Run Code Online (Sandbox Code Playgroud)
我希望变量$mystr相等'The value of myvar is: This is a variable'
还有其他功能可以让你在PHP中执行此操作吗?
我试图使用php file_get_contents读取一个大文件(10M)
$file = 'http://www.remoteserver.com/test.txt';
$data = file_get_contents( $file );
var_dump ( $data );
Run Code Online (Sandbox Code Playgroud)
它倾倒了
string(32720)
Run Code Online (Sandbox Code Playgroud)
然后输出只显示文件的一部分.file_get_contents的某处有限制吗?我试过做ini_set('memory_limit','512M'),但那没用.
编辑:**忘了提**它是一个远程文件.
问题已解决 ::硬盘空间不足.修正了现在一切正常.
我在这里已经阅读了很多问题,我不确定我是否应该使用file_get_contents或file_get_html为此.
我正在尝试做的就是使用PHP在我的网站上显示这个页面中的两个表:http: //www.statmyweb.com/recently-analyzed/
我知道如何获取他们的整个页面并将其显示在我的网站上当然,但我无法弄清楚如何在不获取页眉/页脚的情况下拉出这两个表格.
我正在运行PHP脚本来抓取网页.它适用于许多站点,但是有一个站点失败,返回错误说"不支持HTTP/1.1 505 HTTP版本".
这是我脚本的一部分:
for($i = 0; $i < 1; $i++) {
$page = file_get_contents("http://www.lovelybooks.de/stoebern/empfehlung/romantic fantasy/?seite=$i");
// do something with $page
}
Run Code Online (Sandbox Code Playgroud)
许多答案建议设置HTTP版本明确.我试过设置0.9,1.0和1.1,但它没有改变任何东西.实际上,标题似乎表明我的浏览器请求的HTTP版本和服务器期望的HTTP版本匹配:
回复标题:
HTTP/1.1 200 OK
Date: Mon, 15 Dec 2014 09:01:15 GMT
Server: Apache
X-Powered-By: PHP/5.4.35
Keep-Alive: timeout=2, max=200
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)
请求标头:
GET /path/script.php HTTP/1.1
Host: www.mydoman.de
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Authorization: Basic MjQwMjE5Njc6MDcwNjIwMDc=
Connection: keep-alive
Cache-Control: max-age=0 …Run Code Online (Sandbox Code Playgroud)