Rumah > Soal Jawab > teks badan
Dalam PHP, pembolehubah $id harus menerima nilai integer daripada klien. Walau bagaimanapun, apabila pelanggan menghantar nilai id sebagai integer kepada skrip PHP menggunakan kaedah permintaan POST, ia secara automatik ditukar kepada jenis rentetan dalam PHP apabila skrip dimuat naik ke pelayan WAMP. Sebaliknya, apabila skrip dimuat naik ke pelayan Bluehost, nilai id masih integer dan tidak ditukar kepada rentetan, itulah yang saya mahukan.
Ini ialah skrip PHP mudah:
<?php $id = $_POST["id"]; if (is_int($id)) echo "It is integer"; // It will print this if the PHP script was uploaded to the Bluehost server. else if (is_string($id)) echo "It is string"; // It will print this if the PHP script was uploaded to the WAMP server.
Nilai id yang dihantar dari klien dihantar melalui aplikasi Android, ini adalah cara saya menghantar nilai id ke skrip PHP:
Kelas RetrofitManager
public class RetrofitManager { private static RetrofitManager.Api api; public static RetrofitManager.Api getApi() { if (api == null) api = new Retrofit.Builder() .baseUrl("http://192.151.5.721/API/") .client(new OkHttpClient.Builder().readTimeout(3, TimeUnit.MINUTES).writeTimeout(3, TimeUnit.MINUTES).connectTimeout(25, TimeUnit.SECONDS).build()) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) .build() .create(Api.class); return api; } public interface Api { @FormUrlEncoded @POST("Countries/Get.php") Single<CountryModelResponse> getCountries(@Field("id") int countryId); } }
Kelas CountriesRepository
public class CountriesRepository { public LiveData<Object> getCountries(Context context) { MutableLiveData<Object> mutableLiveData = new MutableLiveData<>(); PublishSubject<String> retrySubject = PublishSubject.create(); RetrofitManager.getApi().getCountries(Navigation.findNavController(MainActivity.activityMainBinding.activityMainFragmentContainerViewContainer).getPreviousBackStackEntry() == null ? SharedPreferencesManager.getIntegerValue(context, SharedPreferencesManager.Keys.COUNTRY_ID.name()) : -1) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .doOnSubscribe(mutableLiveData::setValue) .doOnError(throwable -> { LinkedHashSet<Object> linkedHashSet = new LinkedHashSet<>(); linkedHashSet.add(!Utils.isInternetConnected(context) ? 100 : throwable instanceof SocketTimeoutException ? 200 : 300); linkedHashSet.add(retrySubject); mutableLiveData.setValue(linkedHashSet); }) .retryWhen(throwableFlowable -> throwableFlowable.flatMap(throwable -> retrySubject.toFlowable(BackpressureStrategy.DROP).take(1), (throwable, s) -> s)) .subscribe(countryModelResponse -> { if (countryModelResponse.getRequestStatus() == 100) mutableLiveData.setValue(countryModelResponse); else { LinkedHashSet<Object> linkedHashSet = new LinkedHashSet<>(); linkedHashSet.add(300); linkedHashSet.add(retrySubject); mutableLiveData.setValue(linkedHashSet); } }); return mutableLiveData; } }
Saya tidak pasti mengapa perbezaan tingkah laku ini berlaku antara kedua-dua pelayan.
Saya menggunakan versi terkini pelayan PHP dan WAMP.
P粉1788942352023-09-09 14:02:06
Semua permintaan melalui HTTP dihantar sebagai rentetan. Kita perlu membentuknya mengikut keperluan kita. Dalam kes anda, tingkah laku itu pelik. Cuba semak sama ada versi PHP adalah sama pada kedua-dua hujungnya.