我正在尝试将我的网站的图像从我的主机移动到Amazon S3云托管.这些图像属于客户工作站点,无法公开.我希望它们能够在我的网站上显示,最好是使用亚马逊提供的PHP SDK.
到目前为止,我已经能够为转换编写脚本,以便在数据库中查找记录,获取文件路径,对其进行适当命名,然后将其发送到Amazon.
//upload to s3
$s3->create_object($bucket, $folder.$file_name_new, array(
'fileUpload' => $file_temp,
'acl' => AmazonS3::ACL_PRIVATE, //access denied, grantee only own
//'acl' => AmazonS3::ACL_PUBLIC, //image displayed
//'acl' => AmazonS3::ACL_OPEN, //image displayed, grantee everyone has open permission
//'acl' => AmazonS3::ACL_AUTH_READ, //image not displayed, grantee auth users has open permissions
//'acl' => AmazonS3::ACL_OWNER_READ, //image not displayed, grantee only ryan
//'acl' => AmazonS3::ACL_OWNER_FULL_CONTROL, //image not displayed, grantee only ryan
'storage' => AmazonS3::STORAGE_REDUCED
)
);
Run Code Online (Sandbox Code Playgroud)
在我复制所有内容之前,我创建了一个简单的表单来测试上传和显示图像.如果我使用ACL_PRIVATE上传图像,我可以获取公共网址,但我无法访问,或者我可以使用临时密钥获取公共网址并显示图像.
<?php
//display the image link
$temp_link = $s3->get_object_url($bucket, …Run Code Online (Sandbox Code Playgroud) 我正在使用plupload将多个文件上传到我的服务器.使用它,有一个参数'url:'upload.php'.upload.php会在收到文件时捕获这些文件,如果文件被分块,可能会重新组合它们.收到完整文件后,它会将响应发送回原始页面,并显示绿色复选框图标.
我已经在这个页面上添加了一些代码,在操作我上传的照片的所有主要代码之后.我的计划是创建我的全尺寸图像的三个副本,lg,med和small.我得到了这部分工作,但后来决定首先重命名原始文件以匹配我的命名方案.
我现在得到一个损坏的重命名文件,因此我的三个较小的图像也被破坏了.
//get the original file info
$filepath = $_SERVER['DOCUMENT_ROOT'].'/uploads/';
$filepathinfo = pathinfo($filepath.$fileName);//fileName is used previously in the file
//rename original file to a unique name
$finding_id = 'xyz';
$file_name_new = uniqid($client_id . '-' . $finding_id . '-', true); //doesn't include extension
//rename($filepath.$fileName, $filepath.$file_name_new.'.'.$ext);
//copy($filepath.$fileName, $filepath.$file_name_new.'.'.$ext);
Run Code Online (Sandbox Code Playgroud)
按原样,我得到我的一个文件,或者我上传了多少文件,字节大小完全匹配原始文件,名称保持不变(删除某些字符除外).
如果我只取消注释重命名功能,我实际上得到两个文件.字节大小是原始照片的总和.较大的文件显示底部有一段灰色.较小的文件根本不显示.
如果我只取消注释复制功能,我会获得原始文件,原始文件和另一个文件的精确重命名副本,其大小和损坏与执行重命名的较大文件相同.
有任何想法吗?似乎它应该非常简单.
我在搜索页面上添加了一个“按选项排序”。我正在使用两种选择形式输入类型,一种用于订购字段,一种用于ASC / DESC。我有第一个选项,值=“”和文本“ Select one ...”。
<label for="sort[order_by_field]">Field</label><select name="sort[order_by_field]" id="combobox">
<option value="">Select one...</option>
<optgroup label="---">
<option value="finding_incident_number"<?php echo ($field == 'finding_incident_number' ? ' selected="selected"': false); ?>>Incident #</option>
<option value="finding_violation_type"<?php echo ($field == 'finding_violation_type' ? ' selected="selected"': false); ?>>Finding</option>
<label for="sort[order_by_direction]">Direction</label>
<select name="sort[order_by_direction]">
<option>Select one...</option>
<option value="ASC"<?php echo ($dir == 'ASC' ? ' selected="selected"': false); ?>>Ascending</option>
<option value="DESC"<?php echo ($dir == 'DESC' ? ' selected="selected"': false); ?>>Descending</option>
</select>
Run Code Online (Sandbox Code Playgroud)
提交表单后,我检查是否isset($ _ POST ['sort'])。设置好了。我也检查!empty。它总是空的。我想知道用户是否实际进行了选择。有没有一种方法可以进行设置,这样我就不必检查单个数组的值,即isset($ _ POST ['sort'] ['order_by_field'])?我希望将来可以按字段动态添加/删除可移动数量。
我想我可以使用optiongrp标签,但是那不是语义标记吗?我想虽然可以。
从更广泛的角度来看,将“选择一个...”放置在表单下拉列表中是一种好习惯吗?