cerca di fare un var_dump($contenuto) prima di curl_setopt($ch, CURLOPT_POSTFIELDS, $contenuto);
per assicurarti che il tuo script manda effettivamente i dati interi.

Poi, non so come google gestisca questo, ma altre osservazioni che posso fare, sono queste: e' meglio usare file_get_contents al posto di fread, se vuoi soltanto leggere i dati da un file. Tra l'altro, la libreria curl riesce a leggere da sola il file (es. curl_setopt($ch, CURLOPT_POSTFIELDS, '@/path/al/file'); o qualcosa del genere)

Poi c'e' una differenza importante tra il curl riga di commando, e la libcurl di php.
Se tu mandi un post dalla shell con curl --request POST --data '@file' - il file verra inviato cosi' com'e', cioe se non e' urlencoded, curl non lo codifichera.
Se tu invece mandi un post con libcrul in php, e passando a CURLOPT_POSTFIELDS una stringa non codificata, lui la codifica automaticamente in multipart/form-data. Se gliela passi invece gia' codificata, lui manda i dati in application/x-www-form-urlencoded.


Secondo me, se non sbagli niente nel file xml, e se lo leggi correttamente, dovresti solo giocare un po' con le codifiche.