为什么 $id 变量在 WAMP 服务器上会自动转换为字符串,但在 Bluehost 服务器上却不会?
P粉933003350
P粉933003350 2023-09-08 23:26:44
0
1
384

在 PHP 中,$id 变量应该从客户端接收一个整数值。但是,当客户端使用POST请求方法将id值作为整数发送到PHP脚本时,当脚本上传到WAMP服务器时,它会自动转换为PHP中的字符串类型。另一方面,当脚本上传到Bluehost服务器上时,id值仍然是整数,不会转换为字符串,这正是我想要的。

这是一个简单的 PHP 脚本:


      

从客户端发送的 id 值是通过 Android 应用程序发送的,这就是我将 id 值发送到 PHP 脚本的方式:

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 getCountries(@Field("id") int countryId); } }

CountriesRepository 类

public class CountriesRepository { public LiveData getCountries(Context context) { MutableLiveData mutableLiveData = new MutableLiveData<>(); PublishSubject 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 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 linkedHashSet = new LinkedHashSet<>(); linkedHashSet.add(300); linkedHashSet.add(retrySubject); mutableLiveData.setValue(linkedHashSet); } }); return mutableLiveData; } }
      

我不确定为什么两台服务器之间会出现这种行为差异。

我正在使用最新版本的 PHP 和 WAMP 服务器。

P粉933003350
P粉933003350

全部回复 (1)
P粉178894235

所有通过 HTTP 的请求都作为字符串发送。我们必须根据我们的需要来铸造它。就你而言,行为很奇怪。尝试检查两端的PHP版本是否相同。

    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!