我有一些简单的PHP代码,它将zip文件从远程URL复制到服务器,然后将其解压缩到另一个文件夹中。
public class GroupAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context mContext;
List<ListItem> consolidatedList = new ArrayList<>();
public GroupAdapter(Context context, List<ListItem> consolidatedList) {
this.consolidatedList = consolidatedList;
this.mContext = context;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder viewHolder = null;
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
switch (viewType) {
case ListItem.TYPE_GENERAL:
View v1 = inflater.inflate(R.layout.adapter_teams, parent,
false);
viewHolder = new GeneralViewHolder(v1);
break;
case ListItem.TYPE_TEAM:
View v2 = inflater.inflate(R.layout.adapter_team_header, parent, false);
viewHolder = new DateViewHolder(v2);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) {
switch (viewHolder.getItemViewType()) {
case ListItem.TYPE_GENERAL:
GeneralItem generalItem = (GeneralItem) consolidatedList.get(position);
final GeneralViewHolder generalViewHolder = (GeneralViewHolder) viewHolder;
generalViewHolder.name.setText(generalItem.getPojoOfJsonArray().getName());
generalViewHolder.description.setText(generalItem.getPojoOfJsonArray().getCompany());
if(generalItem.getPojoOfJsonArray().getImageURL() != null && !generalItem.getPojoOfJsonArray().getImageURL().isEmpty()) {
Picasso.with(mContext).load(generalItem.getPojoOfJsonArray().getImageURL()).into(generalViewHolder.profile_image);
}
generalViewHolder.check_item.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
if (ActivityTeams.user_type == 1 && !ActivityTeams.newList.contains(((GeneralItem) consolidatedList.get(position)).getPojoOfJsonArray()) && !ActivityTeams.listOwners.contains(((GeneralItem) consolidatedList.get(position)).getPojoOfJsonArray())) {
UserProject.addUserUniqueTag(ActivityTeams.newList, ((GeneralItem) consolidatedList.get(position)).getPojoOfJsonArray(), UserTag.COLLABORATOR);
} else if(ActivityTeams.user_type == 2 && !ActivityTeams.listOwners.contains(((GeneralItem) consolidatedList.get(position)).getPojoOfJsonArray()) && !ActivityTeams.newList.contains(((GeneralItem) consolidatedList.get(position)).getPojoOfJsonArray())) {
UserProject.addUserUniqueTag(ActivityTeams.listOwners, ((GeneralItem) consolidatedList.get(position)).getPojoOfJsonArray(), UserTag.OWNER);
}
}else {
if(ActivityTeams.user_type == 1) {
ActivityTeams.newList.remove(((GeneralItem) consolidatedList.get(position)).getPojoOfJsonArray());
UserProject.addUserUniqueTag(ActivityTeams.removedColab, ((GeneralItem) consolidatedList.get(position)).getPojoOfJsonArray(), UserTag.COLLABORATOR);
} else if (ActivityTeams.user_type == 2) {
ActivityTeams.listOwners.remove(((GeneralItem) consolidatedList.get(position)).getPojoOfJsonArray());
UserProject.addUserUniqueTag(ActivityTeams.removedOwner, ((GeneralItem) consolidatedList.get(position)).getPojoOfJsonArray(), UserTag.OWNER);
}
}
}
});
if (ActivityTeams.user_type == 1) {
generalViewHolder.check_item.setChecked(ActivityTeams.newList.contains(((GeneralItem) consolidatedList.get(position)).getPojoOfJsonArray()));
} else if (ActivityTeams.user_type == 2) {
generalViewHolder.check_item.setChecked(ActivityTeams.listOwners.contains(((GeneralItem) consolidatedList.get(position)).getPojoOfJsonArray()));
}
break;
case ListItem.TYPE_TEAM:
TeamItem dateItem = (TeamItem) consolidatedList.get(position);
DateViewHolder dateViewHolder = (DateViewHolder) viewHolder;
if (dateItem.getTeam() == null) {
dateViewHolder.txtTitle.setText(mContext.getString(R.string.team_no_team));
} else {
for (int i = 0; i < ActivityTeams.listTeams.size(); i ++) {
if (dateItem.getTeam().equals(ActivityTeams.listTeams.get(i).get_id())) {
dateViewHolder.txtTitle.setText(ActivityTeams.listTeams.get(i).getName());
}
}
}
dateViewHolder.check_group.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
System.out.println(((TeamItem) consolidatedList.get(position)).getTeam());
ArrayList<UserProject> group_list = new ArrayList<>();
for (int i = 0; i< ActivityTeams.listUsers.size(); i++) {
if (ActivityTeams.listUsers.get(i).getTeamId().equals(((TeamItem) consolidatedList.get(position)).getTeam())) {
group_list.add(ActivityTeams.listUsers.get(i));
}
}
}else {
}
}
});
break;
}
}
// ViewHolder for date row item
class DateViewHolder extends RecyclerView.ViewHolder {
protected TextView txtTitle;
protected TextView count;
protected CheckBox check_group;
public DateViewHolder(View v) {
super(v);
this.txtTitle = (TextView) v.findViewById(R.id.title);
this.count = (TextView) v.findViewById(R.id.count);
this.check_group = (CheckBox) v.findViewById(R.id.check);
}
}
// View holder for general row item
class GeneralViewHolder extends RecyclerView.ViewHolder {
public TextView name, description;
public CircleImageView profile_image;
public CheckBox check_item;
public GeneralViewHolder(View v) {
super(v);
this.name = (TextView) v.findViewById(R.id.name);
this.description = (TextView) v.findViewById(R.id.description);
this.profile_image = (CircleImageView) v.findViewById(R.id.profile_image);
this.check_item = (CheckBox) v.findViewById(R.id.check);
}
}
@Override
public int getItemViewType(int position) {
return consolidatedList.get(position).getType();
}
@Override
public int getItemCount() {
return consolidatedList != null ? consolidatedList.size() : 0;
}
}
&#13;
它与Awin的一个URL完美配合,下载并提取正确的600kb压缩文件,但是另一个来自Webgains,它只下载一个大小为0字节的Zip文件。我猜测下载在某个地方被破坏了?
当我访问浏览器上的URL时,它会完美地下载zip(大小约为3mb)。我无法用PHP下载它。
请帮忙!
答案 0 :(得分:1)
由于您没有提供问题URL,我无法肯定地说,但您可能遇到方法副本用于读取文件的问题。直接进行卷曲调用应解决此问题。
尝试以下方法:
function file_get_contents_curl( $url ) {
$ch = curl_init();
curl_setopt( $ch, CURLOPT_AUTOREFERER, TRUE );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, TRUE );
$data = curl_exec( $ch );
if ( curl_errno( $ch ) <> FALSE ) {
echo "ERROR at line " . __LINE__ . " in file_get_contents_curl: error number: " . curl_errno( $ch ) . ' error : ' . curl_error( $ch ) . " url: $url";
return FALSE;
}
curl_close( $ch );
return $data;
}
function extract_remote_zip($new_file_loc, $tmp_file_loc, $zip_url) {
echo 'Copying Zip to local....<br>';
// read the zip
if ( $zip_str = file_get_contents_curl( $zip_url ) ) {
// write the zip to local
if ( !file_put_contents( $tmp_file_loc, $zip_str ) ) {
echo "failed to write the zip to: " . $zip_url;
return FALSE;
}
} else {
echo "failed to read the zip from: " . $zip_url;
return FALSE;
}
//unzip
$zip = new ZipArchive;
$res = $zip->open($tmp_file_loc);
if ($res === TRUE) {
echo 'Extracting Zip....<br>';
if(! $zip->extractTo($new_file_loc)){
echo 'Couldnt extract!<br>';
}
$zip->close();
echo 'Deleting local copy....<br>';
unlink($tmp_file_loc);
return 1;
} else {
echo 'Failed to open tmp zip!<br>';
return 0;
}
}