suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Warum wird die Variable $id auf dem WAMP-Server automatisch in einen String konvertiert, auf dem Bluehost-Server jedoch nicht?

In PHP sollte die Variable $id einen ganzzahligen Wert vom Client erhalten. Wenn der Client jedoch den ID-Wert als Ganzzahl mit der POST-Anforderungsmethode an das PHP-Skript sendet, wird er beim Hochladen des Skripts auf den WAMP-Server automatisch in den String-Typ in PHP konvertiert. Wenn das Skript hingegen auf den Bluehost-Server hochgeladen wird, sind die ID-Werte immer noch Ganzzahlen und werden nicht in Zeichenfolgen konvertiert, was ich möchte.

Dies ist ein einfaches PHP-Skript:

<?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.

Der vom Client gesendete ID-Wert wird über die Android-Anwendung gesendet. So sende ich den ID-Wert an das PHP-Skript:

RetrofitManager-Klasse

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);

    }

}

CountriesRepository-Klasse

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

}

Ich bin mir nicht sicher, warum dieser Verhaltensunterschied zwischen den beiden Servern auftritt.

Ich verwende die neueste Version des PHP- und WAMP-Servers.

P粉933003350P粉933003350440 Tage vor469

Antworte allen(1)Ich werde antworten

  • P粉178894235

    P粉1788942352023-09-09 14:02:06

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

    Antwort
    0
  • StornierenAntwort