读取内容图像,并使用'PHP'和'CURL'以及可执行命令将其存储到文件中

读取内容图像,并使用'PHP'和'CURL'以及可执行命令将其存储到文件中,php,curl,exec,shell-exec,Php,Curl,Exec,Shell Exec,我有一个动态图像作为PHP文件: <?php header('Content-type: image/png'); echo file_get_contents('image.png'); 这很有效 现在,我在php代码中使用了相同的命令和shell\u exec函数: <?php $cmd = 'curl -s http://localhost/image.php'; $out = shell_exec($cmd); file_put_contents('output.png',

我有一个动态图像作为
PHP
文件:

<?php
header('Content-type: image/png');
echo file_get_contents('image.png');
这很有效

现在,我在php代码中使用了相同的命令和
shell\u exec
函数:

<?php
$cmd = 'curl -s http://localhost/image.php';
$out = shell_exec($cmd);
file_put_contents('output.png', $out);
这可能是照片中的二进制

我用
exec
函数尝试的另一个测试

<?php
$cmd = 'curl -s http://localhost/image.php';
exec($cmd, $out);
file_put_contents('output.png', $out);
但图像将不会显示

I区分真实图像和新生成的图像:

显然,因为
$out
的内容是一个数组。在新文件中写得不好

现在,我的工作形式在哪里?我怎样才能达到我的目标


编辑:这个问题似乎只是在windows上出现的。

exec
尝试分解行并返回一个难以处理的数组

shell_exec
将正常工作

<?php
    $cmd = 'curl -s http://localhost/image.php';
    $out = shell_exec($cmd);
    file_put_contents('output.png', $out);

shell\u exec在我的计算机上也不工作。
对于exec,问题可能由exec结果中的附加字符引起,这些字符可能包含与图片不同的字符

要解决这个问题,您可以简单地尝试这些代码。它在我的电脑上工作

<?php
$cmd = 'curl http://localhost/image.php > output.png';
exec($cmd);

它已经是一个文件了
image.png
我不明白你为什么不能直接使用that@nogad这只是一个小的实验室环境,我要做的事情。事实上,原来是另一台服务器上的一张照片,在请求php文件后,我将被重定向到照片的URL。为此,我使用
-L
CURL参数。所以我最后得到的是一张二进制照片,我想从这张照片中生成base64。当然,如果我不成功的话。我可能必须删除
-L
参数,获取CURL响应头的最终URL图像,并用
文件获取内容抓取它,然后直接处理它。或者尝试使用CURL对象php内核。投票时为否定。写下原因。请先测试一下,然后贴出答案。输出是二进制的,无法工作。我在linux和windows上重试,似乎这个问题只是在windows上。我不希望文件中包含内容。我希望在变量中包含内容,我将在base64_encode或其他东西上进行。当然,我试着在我的示例问题中把它放在文件中。但这并不是为了解释我的问题和目的。
‰PNG   
IHDR   ً   P   Z'ï      PLTEےےے   –––¹¸vٍ       pHYs  ؤ  ؤ•+  tIDATX…¥کQ®©„Mdٍl"ْ®"کgˆ`ض“Hة{"e61«¼_u–0™(sخك
کr¹\‏يكےًا~¶’¼ïk¥‘’¥½ZKأb¬Zkّ‰¶»¯½|إj–|ظ.nضـ‏²¯‍آ‡y*üµàٌب›g–Z²'¹چضِê¶طج£µث5³kjںىkoُ
<?php
    $cmd = 'curl -s http://localhost/image.php';
    $out = shell_exec($cmd);
    file_put_contents('output.png', $out);
<?php
$cmd = 'curl http://localhost/image.php > output.png';
exec($cmd);