PHP脚本没有从URL下载压缩的产品源 - 下载在浏览器上访问时工作正常

时间:2017-09-18 21:10:51

标签: php download copy zip feed

我有一些简单的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;
&#13;
&#13;

它与Awin的一个URL完美配合,下载并提取正确的600kb压缩文件,但是另一个来自Webgains,它只下载一个大小为0字节的Zip文件。我猜测下载在某个地方被破坏了?

当我访问浏览器上的URL时,它会完美地下载zip(大小约为3mb)。我无法用PHP下载它。

请帮忙!

1 个答案:

答案 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;
    }
}