• 0

PHP talking to SharePoint


Question

I'm looking at getting PHP talking to SharePoint... Initially just posting an item to a SharePoint list from PHP.

SharePoint exposes a number of web services (http://niklouch.activesharepoint.com/phpint/_vti_bin/Lists.asmx?WSDL).

I am trying to talk to these using SOAP (via the nuSoap PHP library).

I believe I am using it correctly but possibly not. The response I am getting from the server is debugged here (http://www.niklouch.com/sites/work/php_sp/test2.php) - basically:

  Quote
"Server was unable to process request. --> The root element is missing."

Has anyone worked on something like this before?

For reference:

SharePoint SOAP WSDL: http://niklouch.activesharepoint.com/phpin...Lists.asmx?WSDL

SharePoint WebService: http://niklouch.activesharepoint.com/work/...UpdateListItems

My debugged output: http://www.niklouch.com/sites/work/php_sp/test2.php

Code:

<?PHP

/* Requires the NuSOAP library */
require_once('nusoaplib/nusoap.php');

/* Username and password, separated by a colon. Domain may be optional, depending on setup */
$auth = "webtest:webtest";

/* Location of the Lists.asmx file */
$wsdl = "http://niklouch.activesharepoint.com/phpint/_vti_bin/Lists.asmx?WSDL";

/* GUID of the list */
$guid = "{48A2B76C-2E23-4ED0-9C12-DC98897C228A}";

/* Setup NuSOAP. Sharepoint requires NTLM Authorization. Recent version of CURL needed for this */
$client = new nusoap_client($wsdl, true);
$client->setCredentials("","","ntlm");
$client->setCurlOption(CURLOPT_USERPWD, $auth);

$err = $client->getError();
if ($err) {
	echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
	echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->getDebug(), ENT_QUOTES) . '</pre>';
	exit();
}

/* XML for the request */
$xml = '
<UpdateListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">t;listName>'.$guid.'</listName>
	<updates>
		<Batch>
			<Method ID="1" Cmd="New">
				<Field Name="ID" />
				<Field Name="Title">My Title</Field>
			</Method>
		</Batch>
	</updates>
</UpdateListItems>
';

/* Invoke the Web Service */
$result = $client->call('UpdateListItems', $xml);

/* Check for Errors */
if(isset($fault)) {
	echo("<h2>Error</h2>". $fault);
}

/* Debugging Info */
echo("<h2>Request</h2><pre>" . htmlspecialchars($client->request, ENT_QUOTES) . "</pre>");
echo("<h2>Response</h2><pre>" . htmlspecialchars($client->response, ENT_QUOTES) . "</pre>");
echo("<h2>Debug</h2><pre>" . htmlspecialchars($client->debug_str, ENT_QUOTES) . "</pre>");

unset($client);
?>

Link to comment
https://www.neowin.net/forum/topic/773860-php-talking-to-sharepoint/
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Oh I'm posting 1 item with just a title, nothing more. Never really got into the whole web services over PHP thing. May need to try another webservice (simpler) first and then move on to this...

But it's been set as my "Get this working for your 1st day of work" task for my new job! :s

  • 0

Yeah, I'm not the best person to ask either, however the above worked once for me doing something similar.

Maybe the problem is that you are only posting a title? I'm assuming theres a content section this title is applied to (unless its a name of a directory or something?) That could possibly be what its relating to when returning 'The root element is missing'.

EDIT: Btw, what the new job? Your confused smiley makes it seem your not sure why they asked you do this.. are you being asked to do this by those who think that because your in the I.T department somewhere you should know all everything computer related ever?

  • 0

LOL - no I made a sharepoint list that just contains a title, nothing more. And the confused smiley is sorta because this was not advertised as part of the role, but I mentioned I was also a SharePoint developer, and so they sprung into "Wow - we want a SharePoint connector for our product"... Makes sense totally, but PHP and SharePoint are two languages never destined to play well together, and "SharePoint development" to me has always been within either the SharePoint environment or at least with .net based languages - so I can use the .net libraries...

It would be a VERY cool piece of engineering, and I know how I wanna make it - but it just isn't seeming to work.

  • 0

I'm really not sure.. Never tried using PHP with any other language yet, just starting to really get to grips with PHP itself only recently.

This is probably wrong, but when I go to activesharepoint.com it asks me to login to web2003.activeisp.com, is it possible your wsdl variable is set to the wrong target?

  • 0

Is it necessary for NuSoap library that the sharepoint site must allow anonymous access? Well, I want to do the same but I am not able to do. I searched alot and alot but didn't find any solution which worked for me :(

Can you please help.

Thanks

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Most of what you asked was in the article, what do you get for wasting my time? This is a “deal”’article, not a review of the machine.
    • An Air India plane with 242 people on board crashed Thursday near a major international airport in the western Indian city of Ahmedabad, the airline and the country's government said. https://www.nbcnews.com/world/asia/air-india-plane-crashes-indias-ahmedabad-airport-rcna212545
    • NTLite 2025.06.10473 by Razvan Serea NTLite is a Windows configuration tool that allows you to modify your existing Windows install or an image yet to be deployed, remove Windows components, configure and integrate, speed up the Windows deployment process. Reduce Windows footprint on your RAM and storage drive memory. Remove components of your choice, guarded by compatibility safety mechanisms, which speed up finding that sweet spot. Windows Unattended feature support, providing many commonly used options on a single page for easy setup. Easily integrate a single or multiple drivers, update or language packages. Package integration features smart sorting, enabling you to seamlessly add packages for integration and the tool will apply them in the appropriate order, keeping hotfix compatibility in check. One of the important new features of NTLite (compared to its predecessors) is the ability to modify an already installed the operating system, by removing unnecessary components. Supports Windows 11, 10, 8.1 and 7, x86 and x64, live and image. Server editions of the same versions, excluding support for component removals and feature configuration. ARM64 image support in the alpha stage. Does not support Checked/Debug, Embedded, IoT editions, nor Vista or XP. NTLite 2025.06.10473 changelog: Upgrade UI: Text size now set as host, more readable on some systems Post-setup: Loading progress improvement for the 99% delay Components: ‘Snipping tool’ compatibility option UI-Translation: Thanks for Romanian (Coman) Fix Updates: Parallel WinRE integration getting stuck Updates: Download overwrite previous Defender updates Settings: Win10 News widget disabling Download: NTLite 64-bit | 21.5 MB (Free, paid upgrade available) Download: NTLite 32-bit | 19.3 MB Link: NTLite Home Page | NTLite Features | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • You will be on builds 26100.4349 (24H2) No, some machines are on 26100.4351 updated 12 hours after the official release
    • I’d be wanting to offload it fast too, wasted desk real estate.
  • Recent Achievements

    • Week One Done
      elsafaacompany earned a badge
      Week One Done
    • Week One Done
      Yianis earned a badge
      Week One Done
    • Veteran
      Travesty went up a rank
      Veteran
    • One Month Later
      somar86 earned a badge
      One Month Later
    • Week One Done
      somar86 earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      507
    2. 2
      ATLien_0
      261
    3. 3
      +Edouard
      186
    4. 4
      +FloatingFatMan
      180
    5. 5
      snowy owl
      132
  • Tell a friend

    Love Neowin? Tell a friend!