php服务器需要修改一些文件限制
参考http://www.111cn.net/phper/php-cy/50203.htm
要注意的是修改完成后要重启apache服务,sudo /etc/init.d/apache2 restart
服务器代码save_upload_file.php:
<?php function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br />"; echo "Ending Script"; die(); } set_error_handler("customError"); if ($_FILES["imagefile"]["error"] > 0) { echo "Error: " . $_FILES["imagefile"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["imagefile"]["name"] . "<br />"; echo "Type: " . $_FILES["imagefile"]["type"] . "<br />"; echo "Size: " . ($_FILES["imagefile"]["size"] / 1024) . " Kb<br />"; echo "Stored in: " . $_FILES["imagefile"]["tmp_name"]; if (file_exists("/home/lsc/phpupload/" . $_FILES["imagefile"]["name"])) { echo $_FILES["imagefile"]["name"] . " already exists. "; } else { if(!move_uploaded_file($_FILES["imagefile"]["tmp_name"], "/home/lsc/phpupload/" . $_FILES["imagefile"]["name"])) { echo "move file error"; } echo "Stored in: " . "/home/lsc/phpupload/" . $_FILES["imagefile"]["name"] . "<br />"; echo dirname(__FILE__); } } ?>
刚开始时候总是接收不到文件,后来才发现这里imagefile这个名字要和客户端的保持一致
android客户端代码:
package com.example.androidphpclient; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import android.os.AsyncTask; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.util.Log; import android.view.Menu; import android.widget.Toast; public class MainActivity extends Activity { private final static String strUrl = "http://192.168.1.150/save_upload_file.php"; private String uploadFile = "/sdcard/Diagram2.png"; private String srcPath = "/sdcard/Diagram2.png"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new sendToPHP().execute(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } class sendToPHP extends AsyncTask<String, Integer, String>{ @Override protected String doInBackground(String... arg0) { // TODO Auto-generated method stub File file = new File(uploadFile); try { HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(strUrl); FileBody bin = new FileBody(file); MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); reqEntity.addPart("imagefile", bin); post.setEntity(reqEntity); HttpResponse response = client.execute(post); HttpEntity resEntity = response.getEntity(); if (resEntity != null) { Log.i("RESPONSE",EntityUtils.toString(resEntity)); } } catch (Exception e) { e.printStackTrace(); } return null; } //onPostExecute方法用于在执行完后台任务后更新UI,显示结果 @Override protected void onPostExecute(String result) { } } }
错误报告的等级修改在php.ini的如下字段:
error_reporting