Tud*_*oiu 6 php copy file file-get-contents
使用 PHP copy 或 file_put_contents 保存图像有时会返回以下错误:无法打开流:协议错误。
这是我尝试的工作流程:
// A. using file_get_contents and file_put_contents
$image = file_get_contents('https://maps.googleapis.com/maps/api/place/photo?key=' . $apiKey . '&photoreference=' . $mainPhoto['photo_reference'] . '&maxheight=300'
file_put_contents('googleimage/' . $mainPhoto['photo_reference'] . '.jpg', $image) // here is where the exception is thrown
// B. using copy
copy('https://maps.googleapis.com/maps/api/place/photo?key=' . $apiKey . '&photoreference=' . $mainPhoto['photo_reference'] . '&maxheight=300', 'googleimages/' . $mainPhoto['photo_reference'] . '.jpg');
Run Code Online (Sandbox Code Playgroud)
这只是有时发生,仅适用于某些图片。
Jea*_*ark 10
该协议错误时所提出的文件名不符合规格的文件名可能发生。例如,它包含保留字符或太长。
错误发生在这一行
file_put_contents('googleimage/' . $mainPhoto['photo_reference'] . '.jpg', $image)
Run Code Online (Sandbox Code Playgroud)
并在评论中举例说明了 $mainPhoto['photo_reference'] 可以包含的内容(以及无效的内容)。诚然,我没想到会找到保留字符,也没有,所以我试图缩短它。请参阅下面的比较(我从其末尾删除了字符,直到它起作用为止)。首先是原始字符串,然后是缩短的字符串。
CqQBlwAAAJMqc533H5kDibo444KqEkGjgnCWRKvmadBld3Aw_wlGom502_V3FJeg76SuGnRU77oriCREzQDZ21WtOhqT76l9ysb8aj5xWeKq7jUUTkwBZ5oWyQB7joGNca6SENMTeBY_DxGt2zrxCxouVFysg1rWaFbRA0wSMk1TGyGeY_zDFdP_I1qVp_aj5QlLFNNTpMYTNjf_YXzyTosjcAS8t5ESEMJIOAxBL1iQaOP1UH9eWxwaFH7WRElugeqGGG2srPd_wOAKvtLO
CqQBlwAAAJMqc533H5kDibo444KqEkGjgnCWRKvmadBld3Aw_wlGom502_V3FJeg76SuGnRU77oriCREzQDZ21WtOhqT76l9ysb8aj5xWeKq7jUUTkwBZ5oWyQB7joGNca6SENMTeBY_DxGt2zrxCxouVFysg1rWaFbRA0wSMk1TGyGeY_zDFdP_I1qVp_aj5QlLFNNTpMYTNjf_YXzyTosjcAS8t5ESEMJIOAxBL1iQaOP1UH9eWxwaFH7WREl
Run Code Online (Sandbox Code Playgroud)
(你可以尝试一下,也可以随机缩短字符串。但是,删除我这样创建的文件并不是那么容易。)
这只是有时发生,仅适用于某些图片。
我怀疑这取决于您收到的谷歌参考字符串。长度可能变化很大,以至于确实有所不同。
请参阅 Microsoft从 2018.05.31 开始的命名文件、路径和命名空间:
例如,保留字符(来自命名约定)
< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)
Run Code Online (Sandbox Code Playgroud)
来自维基百科的文章Filename,部分Length Restrictions:
一些文件系统限制文件名的长度。
可能某些图像太大,您需要增加上传容量或最大执行时间php.ini:
maximum_execution_time = 120
memory_limit = 250M
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3120 次 |
| 最近记录: |